簡體   English   中英

Google OAuth2 無法獲取個人資料信息

[英]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 文檔。

  1. 它有ID 令牌的描述。

    https://developers.google.com/identity/protocols/OpenIDConnect#obtainuserinfo

    Google ID 令牌可能包含以下字段(稱為聲明):

    身份令牌

    請注意,它並不always提供的列中。 我認為不同的 API 可能會有所不同。

  2. 相同的文檔有“獲取用戶配置文件信息”部分

    它解釋了從何處獲取/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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM