Проверка Php Firebase с помощью Twitter получение информации о пользователе

# #php #firebase #twitter #firebase-authentication

Вопрос:

Я не хочу реализовывать вход в Twitter через API Firebase. Мой клиент-приложение для Android, которое входит в учетную запись Twitter и отправляет idToken на мой сервер php. Это прекрасно работает.

 OAuthProvider.Builder provider = OAuthProvider.newBuilder("twitter.com");
provider.addCustomParameter("lang", "de");
FirebaseAuth.getInstance()
        .startActivityForSignInWithProvider(/* activity= */ this, provider.build())
        .addOnSuccessListener(
                new OnSuccessListener<AuthResult>() {
                    @Override
                    public void onSuccess(AuthResult authResult) {
                        // User is signed in.
                        // IdP data available in
                        // authResult.getAdditionalUserInfo().getProfile().
                        // The OAuth access token can also be retrieved:
                        // authResult.getCredential().getAccessToken().
                        // The OAuth secret can be retrieved by calling:
                        // authResult.getCredential().getSecret().
                        Log.d("werte", "User is signed in");
                        Log.d("werte", "Username: "   authResult.getAdditionalUserInfo().getUsername());
                        Log.d("werte", "Info: "   authResult.getAdditionalUserInfo().getProfile().toString());
                        authResult.getUser().getIdToken(true).addOnSuccessListener(new OnSuccessListener<GetTokenResult>() {
                            @Override
                            public void onSuccess(GetTokenResult getTokenResult) {
                                Log.d("werte", "Accesstoken: "   getTokenResult.getToken());
                            }
                        });
                    }
                })
        .addOnFailureListener(
                new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        // Handle failure.
                        Log.d("werte", "Sign in failed");
                        e.printStackTrace();
                    }
                });
 

Но для php я нашел только метод проверки токена. Мне дополнительно нужна информация о пользователе. Как мне это получить?

 $verifier = IdTokenVerifier::createWithProjectId('myProjectId');
try {
    $token = $verifier->verifyIdToken($idToken);
    echo($token);
} catch (IdTokenVerificationFailed $e) {
    echo $e->getMessage();
    // Example Output:
    // The value 'eyJhb...' is not a verified ID token:
    // - The token is expired.
}
 

Редактировать:
Я решил эту проблему с помощью Фрэнка. Но я использовал немного другой способ.

 $googleKeysURL = 'https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com';
        $key = json_decode(file_get_contents($googleKeysURL), true);
        $decoded = JWT::decode($idToken, $key, array("RS256"));
 

В $decoded объекте вы можете найти всю необходимую информацию профиля.
Спасибо, Фрэнк

Ответ №1:

Проверка маркера идентификатора делает не более того, что говорится в его названии: он проверяет, что маркер подписан действительным ключом.

Если вы хотите использовать утверждения из декодированного токена, используйте библиотеку декодирования JWT, подобную библиотеке Firebase: php-jwt. Из примера в документации следует, что вы сможете получить декодированный токен с помощью:

 $decoded = JWT::decode($jwt, $key, array('HS256'));
 

Комментарии:

1. Откуда я могу получить объект $jwt?