Недопустимый токен из плагина google_sign_in при проверке на стороне сервера - PullRequest
0 голосов
/ 16 сентября 2018

Пожалуйста, я пытаюсь внедрить социальную аутентификацию в моем приложении для флаттера с помощью плагина google_sign_in plugin . Он работает правильно на стороне клиента и получает данные учетной записи пользователя.
Моя проблема в том, что я хочу сохранить пользователя в своей базе данных, поэтому мне нужно проверить, что id_token получено на стороне сервера. Я попытался сделать это с помощью библиотеки API Google на стороне сервера, как показано здесь , но я получил неверный результат токена. В конце концов я решил попробовать конечную точку tokeninfo https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=<my_token>, которая должна возвращать ответ 200 с телом, содержащим данные пользователя и другую информацию, но я получаю ответ 400 с телом {"error_description": "Invalid Value"}.
Я расшифровал токен с помощью jwt.io, чтобы удостовериться, что это токен с истекшим сроком действия, и токен все еще действителен.

Это код google_sign_in, который я использовал на флаттере, чтобы получить id_token.

GoogleSignIn _googleSignIn = new GoogleSignIn(
    scopes: <String>[ 
      'profile',
      'email',
      'https://www.googleapis.com/auth/contacts.readonly',
    ],
  );

  Future<Null> _handleSignIn() async {
    try {
      _googleSignIn.signIn().then((result){
          result.authentication.then((googleKey){
              print(googleKey.accessToken);
              print(googleKey.idToken);
              print(_googleSignIn.currentUser.displayName);
          }).catchError((err){
            print('inner error');
          });
      }).catchError((err){
          print('error occured');
      });
      print('signed in .....');
    } catch (error) {
      print(error);
    }
  } 

Пожалуйста, любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 04 апреля 2019

Оказывается, токены действовали все время. Токены усекаются в командной строке и становятся недействительными.
Теперь я проверяю правильность, используя для проверки пакет HTTP без необходимости копировать токен.
например.

 Dio dio = new Dio();
 Response response = await dio.get('https://www.googleapis.com/oauth2/v1/tokeninfo?id_token='+googleKey.idToken);
 print(response.data); //contains the token info
0 голосов
/ 02 января 2019

В документе google_sign_in есть детали для IOS, но в Android они пропустили этот шаг:

  1. Добавить

classpath 'com.google.gms: google-services: 4.2.0 '

в зависимостях в вашем корне "build.gradle"

Добавить

применить плагин: 'com.google.gms.google-services'

внизу вашего "app / build.gradle"

Добавить

реализация "com.google.gms: google-services: 4.2.0"

в зависимости в "app / build.gradle«

Перейдите в консоль Firebase, загрузите

google-services.json

и скопируйте его в каталог "app /"

После завершения всех этих шагов вы можете запустить и получить idToken нормальный

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...