![](/img/trans.png)
[英]How to get email and profile information from OAuth2 Google API?
[英]Google OAuth2 cannot get profile info
我正在使用https://accounts.google.com/o/oauth2/auth?
獲取id_token
端點。
范圍是openid profile email
。
問題是,當我嘗試驗證id_token
我得到iss, azp, aud, sub, email, email_verified, iat, exp, jti
。 正如您所看到的,沒有任何個人資料信息,例如given_name, family_name, picture
。
官方文檔說它應該包含個人資料信息:
// These seven fields are only included when the user has granted the "profile" and
// "email" OAuth scopes to the application.
"email": "testuser@gmail.com",
"email_verified": "true",
"name" : "Test User",
"picture": "https://lh4.googleusercontent.com/-kYgzyAWpZzJ/ABCDEFGHI/AAAJKLMNOP/tIXL9Ir44LE/s99-c/photo.jpg",
"given_name": "Test",
"family_name": "User",
"locale": "en"
授予所有權限。
更新
所以萬一有人需要它。
正如Vladimir Serykh提到的,要獲取配置文件信息,我們需要點擊/userinfo
端點。 但是此端點將access_token
作為Authorization
標頭中的 Bearer 令牌,因此您也需要獲取它。
所以基本上我們需要使用response_type='id_token token'
查詢參數調用 OAuth2。 之后 responseUrl 也將包含access_token
。
接下來,您只需要調用https://openidconnect.googleapis.com/v1/userinfo
端點,並將 Authorization 標頭設置為Bearer your_access_token
。 您將收到包含個人資料信息的回復:
"sub": "user_id",
"name": "Name Lastname",
"given_name": "Name",
"family_name": "Lastname",
"picture": "pic_url",
"email": "example@gmail.com",
"email_verified": true,
"locale": "en"
再次感謝您,弗拉基米爾·塞里赫
不太清楚文檔的年齡(通過您提供的鏈接)以及它是否與您的案例相關。
我知道不同的身份提供者的工作方式可能略有不同。 而且我知道您應該使用獲得的 ID 令牌單獨調用/userinfo
端點以獲取用戶信息的情況。
Google Identity Platform有一些不同的 Google 文檔。
它有ID 令牌的描述。
https://developers.google.com/identity/protocols/OpenIDConnect#obtainuserinfo
Google ID 令牌可能包含以下字段(稱為聲明):
請注意,它並不always
在提供的列中。 我認為不同的 API 可能會有所不同。
相同的文檔有“獲取用戶配置文件信息”部分
它解釋了從何處獲取/userinfo
端點 URL 以及如何調用它。 在回復中,您應該會收到您需要的信息。
我猜測為什么它在您的情況下不起作用是您正在使用/tokeninfo
端點。 它不是 OpenID Connect 標准的一部分。 它只是驗證令牌並解析它(與https://jwt.io執行相同的工作)。 由於某種原因,原始 ID 令牌不包含該聲明。 因此/tokeninfo
端點不會將它們返回給您。
但是根據 Google 的文檔,您應該使用/userinfo
端點來獲取用戶信息聲明。
您可以在 OpenID Connect 規范中找到此端點的描述: https : //openid.net/specs/openid-connect-core-1_0.html#UserInfo
5.3 UserInfo 端點
UserInfo 端點是一個 OAuth 2.0 受保護資源,它返回有關經過身份驗證的最終用戶的聲明。 為了獲得所請求的關於最終用戶的聲明,客戶端使用通過 OpenID Connect 身份驗證獲得的訪問令牌向 UserInfo 端點發出請求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.