2016-03-15 150 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属性。