[英]Rails OAuth: Can't get refresh token from microsoft office 365 rest api
[英]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函數,但是該庫的文檔非常稀疏 ,所以我無法真正分辨。
這是Office 365端的錯誤,是本教程的錯誤,還是我自己做錯了什么?
我嘗試使用普通的HTTP請求重現此問題,但是我可以成功獲取preferred_username屬性。
據我所知,只有在請求中指定了openid范圍時,我們才能獲得此屬性。 為了縮小此問題的范圍,建議您嘗試在不使用Ruby的情況下使用Fiddler或Postman。
這是使用Web瀏覽器和Fiddler獲取ID令牌以供參考的測試:
替換預覽請求中的身份驗證代碼,並使用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}
從下面的鏈接解碼ID令牌:
然后,我可以從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.