2016-01-17 19 views
5

Używam Google Sign-In w mojej aplikacji na iOS. Wszystko działało dobrze do niedawna, gdy zauważyłem, że aplikacja nie otrzymuje już nazwy użytkownika, zwracany jest tylko adres e-mail.Punkt końcowy logowania Google nie zwraca już nazwy użytkownika

jestem coraz token za pośrednictwem aplikacji, które poślę do mojego serwera, który używany do pobierania pełnej informacji przez wysłanie żądania do tego punktu końcowego:

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

Dostaję tego rodzaju odpowiedź teraz:

{ 

    "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 

} 

starałem się korzystać z innych punktów końcowych, jak https://www.googleapis.com/oauth2/v1/tokeninfo?access_token= i https://www.googleapis.com/oauth2/v1/userinfo?access_token=, ale żaden z nich nie pracował.

Próbowałem także z placem zabaw, ale nie mogę znaleźć tego, którego punktu końcowego użyć, mój zakres jest dobrze zdefiniowany i widzę w aplikacji na iOS, że wszystkie uprawnienia są wymagane, ale jakoś nadal nie zwraca nazwy użytkownika .. . Jakieś pomysły?

+0

można sprawdzić, czy konto ma nazwę Set (co zdarza się w przypadku próby z innych kont?). Gdy przejdziesz na https://developers.google.com/oauthplayground/ i poprosisz o zakres profilu, a następnie wymieni kod na tokeny, zobaczysz nazwę, gdy dodasz id_token do https://www.googleapis.com/oauth2/v1/tokeninfo? id_token = –

+0

@StevenSoneff yes moje konto ma ustawioną nazwę, a problem dotyczy wszystkich kont. I nie, ja też tam nie widzę tego imienia. –

+0

Tak, nie wydaje się być problemem z kontem. Jakiej wersji pakietu SDK do logowania Google na iOS używasz? Czy możesz dodać jakiś fragment do pytania, pokazując, jak jest skonfigurowany? Twój link do starszych pakietów SDK G +, czy próbowałeś użyć najnowszego? https://developers.google.com/identity/sign-in/ios/ –

Odpowiedz

3

należy użyć access_token zamiast id_token, więc będzie jeszcze w stanie do kwerendy punkt końcowy tokeninfo za bardzo swój token za pomocą:
https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=

Ale teraz możesz również zapytać o inne punkty końcowe dostępu do innych informacji, takich jak imię:
https://www.googleapis.com/plus/v1/people/me?access_token=

Sprawdź jak możesz wykorzystać Google signin iOS SDK i upewnić się, czy kupowana koniec wysyłanie do serwera z access_token zamiast id_token.

przykład w 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

Działa, dzięki! –

+0

To zadziałało dla mnie. Co dziwne, idToken działa przez pewien czas, ale nie na innych, co bardzo utrudniało debugowanie! – Brendan

2

Według OpenID Connect documentation

do celów debugowania, można użyć końcowego tokeninfo Google. Załóżmy, że wartość Twojego tokena jest XYZ123. Następnie wyłączysz identyfikator URI https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=XYZ123. Jeśli token jest ważny, odpowiedzią będzie jego zdekodowany formularz JSON.

W rezultacie, należy użyć https://www.googleapis.com/oauth2/v3/tokeninfo?id_token= zamiast

Oto wynik próbki:

{ 
    "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" 
} 
Powiązane problemy