2016-03-15 48 views
0

我跟着this tutorial和已經得到的地步,我解碼返回的標記,並提取電子郵件地址(應存儲在preferred_username屬性)即,下面的代碼:的OAuth2令牌不包含preffered_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" 
} 

快速格蘭ce在the spec表示我從Office 365獲得正確的對象,因爲preferred_username被提及爲潛在的聲明,但它不在我回來的對象中。

這是可能的我沒有調用get_token函數與正確的參數,但the documentation for the library is pretty sparse,所以我真的不知道。

I have raised an issue on Github.

這是在Office 365結束一個錯誤,本教程的錯誤,還是我做錯了自己?

+1

你可以我們'fetch'。更多信息http://ruby-doc.org/core-2.2.0/Hash.html#method-i-fetch – devanand

回答

1

賈森 - 約翰斯頓從微軟(本教程的作者)回答here

的Azure團隊部署了一個重大更改自己的V2身份驗證的端點,這是造成preferred_username不存在。您需要將配置文件添加到auth_helper.rb中的SCOPES數組中。我將在構建會議之後發佈更新。

auth_helper.rb作用域數組現在看起來像這樣:

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

雖然這個鏈接可能回答這個問題,但最好在這裏包含答案的基本部分,提供鏈接供參考。如果鏈接頁面更改,則僅鏈接答案可能會失效 – Nehal

1

我嘗試使用正常的HTTP請求重現此問題,但是我可以成功地獲得preferred_username屬性。

據我所知,只有當我們在請求中指定了openid作用域時,我們纔可以獲得此屬性。爲了縮小這個問題,我建議你嘗試使用沒有Ruby的Fiddler或Postman。

下面是測試使用Web瀏覽器和提琴手得到您參考ID令牌:

  1. 使用Office 365帳戶(你可以參考教程)
  2. 註冊在門戶網站中的應用 https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id= {的ClientID} & RESPONSE_TYPE =代碼& REDIRECT_URI = {}的redirectUrl & response_mode =查詢&範圍= HTTPS%3A%2F%2Foutlook.office.com%2Fmail.read:通過下面的鏈接獲得在web broswer在auth代碼%20https%3A%2F%2Foutlook.office.com%2Fmail.send%20 的OpenID &狀態= 12345
  3. 使用招張貼請求以獲得令牌替換從預覽請求的AUTH碼和:

    POST:https://login.microsoftonline.com/common/oauth2/v2.0/token grant_type = authorization_code & CLIENT_ID = {的ClientID} &範圍= HTTPS%3A%2F%2Foutlook.office.com%2Fmail.read%20https%3A%2F%2Foutlook.office.com%2Fmail。發送%20 的OpenID & REDIRECT_URI = HTTP%3A%2F%2Flocalhost%3A55065%2F & client_secret = {ClientSecret} &代碼= {校驗碼}

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

    https://jwt.io/

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