簡體   English   中英

從Office 365返回的OAuth2令牌不包含preffered_username聲明

[英]OAuth2 token returned from Office 365 doesn't contain a preffered_username claim

我按照本教程進行操作 ,現在已經到了解碼返回的令牌並提取電子郵件地址(應存儲在preferred_username屬性中)的地步,即以下代碼:

decoded_token = Base64.urlsafe_decode64(encoded_token)
jwt = JSON.parse(decoded_token)
email = jwt['preferred_username']

問題是返回的對象不包含此屬性,我得到的返回結果類似於以下內容:

{  
   "ver":"2.0",
   "iss":"https://login.microsoftonline.com/9188040d-6c67-4c5b-b112-36a304b66dad/v2.0",
   "aud":"0ab6433e-84fc-469b-8c72-41f7a0241a61",
   "exp":1458142389,
   "iat":1458055989,
   "at_hash":"0OYaLKpTTdHNBrQNOqwQ0Q",
   "sub":"AAAAAAAAAAAAAAAAAAAAAC1TrOaOmvInYrFAyrQjlFI",
   "tid":"9188040d-6c67-4c5b-b112-36a304b66dad"
}

快速瀏覽該規范表明我正在從Office 365找回正確的對象,因為提到了preferred_username是一個潛在的主張,但我沒有找回該對象。

我可能沒有使用正確的參數調用get_token函數,但是該庫的文檔非常稀疏 ,所以我無法真正分辨。

我在Github上提出了一個問題。

這是Office 365端的錯誤,是本教程的錯誤,還是我自己做錯了什么?

我嘗試使用普通的HTTP請求重現此問題,但是我可以成功獲取preferred_username屬性。

據我所知,只有在請求中指定了openid范圍時,我們才能獲得此屬性。 為了縮小此問題的范圍,建議您嘗試在不使用Ruby的情況下使用Fiddler或Postman。

這是使用Web瀏覽器和Fiddler獲取ID令牌以供參考的測試:

  1. 使用Office 365帳戶在門戶中注冊應用程序(您可以參考該教程)
  2. 通過以下鏈接在網絡瀏覽器中獲取身份驗證代碼: https ://login.microsoftonline.com/common/oauth2/v2.0/authorize ? client_id = {ClientID}&response_type = code&redirect_uri = {RedirectURL}&response_mode = query&scope = https %3A%2F%2Foutlook.office.com%2Fmail.read%20https%3A%2F%2Foutlook.office.com%2Fmail.send%20 openid &state = 12345
  3. 替換預覽請求中的身份驗證代碼,並使用Fiddler發布請求以獲取令牌:

    POST: https: //login.microsoftonline.com/common/oauth2/v2.0/token grant_type = authorization_code&client_id = {ClientID}&scope = https%3A%2F%2Foutlook.office.com%2Fmail.read%20https%3A% 2F%2Foutlook.office.com%2Fmail.send%20 openid &redirect_uri = http%3A%2F%2Flocalhost%3A55065%2F&client_secret = {ClientSecret}&code = {AuthCode}

  4. 從下面的鏈接解碼ID令牌:

    https://jwt.io/

然后,我可以從ID令牌中成功獲取preferred_username屬性。

來自Microsoft(本教程的作者)的Jason Johnston 在這里回答:

Azure團隊對其v2身份驗證終結點部署了重大更改,這導致不存在preferred_username。 您需要在auth_helper.rb中將配置文件添加到SCOPES陣列。 在構建會議之后,我將發布教程的更新。

現在, auth_helper.rb中的SCOPES數組如下所示:

SCOPES = [ 'openid', 'https://outlook.office.com/mail.read', 'profile' ]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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