2016-01-17 4 views
5

Я использую Google Sign-In в своем приложении iOS. Все хорошо работало до недавнего времени, когда я заметил, что приложение больше не получает имя пользователя, возвращается только адрес электронной почты.Конечная точка входа в Google не возвращает имя пользователя больше

Я получаю фишку через приложение, которое я посылаю мой сервер, который используется для извлечения полной информации, отправив запрос на эту конечную точку:

https://www.googleapis.com/oauth2/v1/tokeninfo?id_token=MYTOKEN 

Я получаю такой ответ Сейчас:

{ 

    "issuer": "https://accounts.google.com", 
    "issued_to": "o37l8g.apps.googleusercontent.com", 
    "audience": "o37l8g.apps.googleusercontent.com", 
    "user_id": "113504", 
    "expires_in": ​814, 
    "issued_at": ​1452991611, 
    "email": "[email protected]", 
    "email_verified": true 

} 

Я пытался использовать другие конечные точки, как https://www.googleapis.com/oauth2/v1/tokeninfo?access_token= и https://www.googleapis.com/oauth2/v1/userinfo?access_token=, но ни один из них не работал.

Я также пробовал на игровой площадке, но не могу найти, какую конечную точку использовать, моя область видимости определена, и я вижу в приложении iOS все разрешения, но почему-то все равно не возвращает имя пользователя. . Есть идеи?

+0

Вы можете убедиться, что ваша учетная запись имеет имя набора (то, что происходит, если вы пытаетесь с другими счетами?). Когда вы переходите на https://developers.google.com/oauthplayground/ и запрашиваете область профиля, затем обмениваетесь кодом для токенов, вы видите имя, когда вы добавляете id_token в https://www.googleapis.com/oauth2/v1/tokeninfo? id_token = –

+0

@StevenSoneff да моя учетная запись имеет множество имен, и проблема связана с любой учетной записью. И нет, я тоже не вижу там названия. –

+0

Да, похоже, проблема с учетной записью. Какую версию SDK для входа в систему Google вы используете? Можете ли вы добавить какой-либо фрагмент к вопросу, показывающему, как он настроен? Ваша ссылка на старые G + SDK, вы пробовали использовать последнюю версию? https://developers.google.com/identity/sign-in/ios/ –

ответ

3

Вы должны использовать access_token вместо id_token, так что вы будете по-прежнему иметь возможность запроса конечная точка tokeninfo для вашего токена, используя:
https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=

Но теперь вы также можете запросить другие конечные точки для доступа к другой информации, как имя:
https://www.googleapis.com/plus/v1/people/me?access_token=

Проверьте, как вы используете Google IOS SDK для входа в аккаунт и убедитесь, что вы получаете конец отправки на сервер в access_token вместо id_token.

пример Swift:

func signIn(signIn: GIDSignIn!, didSignInForUser user: GIDGoogleUser!, withError error: NSError!) { 
    let token = user.authentication.accessToken // YES 
    let token = user.authentication.idToken // Maybe NO 
... 
+0

Он работает, спасибо! –

+0

Это сработало для меня. Как ни странно, idToken работает некоторое время, но не другие, что очень затрудняет отладку! – Brendan

2

Согласно OpenID Connect documentation

Для целей отладки, вы можете использовать tokeninfo конечную точку Google. Предположим, что значение вашего токена ID - XYZ123. Тогда вы бы разыменовали URI https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=XYZ123. Если токен действителен, ответом будет его декодированная форма JSON.

В результате, вы должны использовать https://www.googleapis.com/oauth2/v3/tokeninfo?id_token= вместо

Вот пример результата:

{ 
    "iss": "https://accounts.google.com", 
    "at_hash": "q5xc...", 
    "aud": "6043....apps.googleusercontent.com", 
    "sub": "10983809...", 
    "email_verified": "true", 
    "azp": "6043....apps.googleusercontent.com", 
    "email": "[email protected]", 
    "iat": "1453101827", 
    "exp": "1453105427", 
    "name": "BNK", 
    "picture": "https://lh6.googleusercontent.com/-XP8Sq0RiUvg/AAAAAAAAAAI/.../photo123.jpg", 
    "given_name": "...", 
    "family_name": "...", 
    "locale": "en", 
    "alg": "RS256", 
    "kid": "411f5ba60aa6....ec50f90e8" 
}