outlook – 无法使用Office 365 REST API登录电子邮件

我按照这篇文章http://dev.office.com/code-samples-detail/2142和Ruby来获取用户的电子邮件地址.这是代码:

# Parses an ID token and returns the user's email
def get_email_from_id_token(id_token)

  # JWT is in three parts, separated by a '.'
  token_parts = id_token.split('.')
  # Token content is in the second part
  encoded_token = token_parts[1]

  # It's base64, but may not be padded
  # Fix padding so Base64 module can decode
  leftovers = token_parts[1].length.modulo(4)
  if leftovers == 2
    encoded_token += '=='
  elsif leftovers == 3
    encoded_token += '='
  end

  # Base64 decode (urlsafe version)
  decoded_token = Base64.urlsafe_decode64(encoded_token)

  # Load into a JSON object
  jwt = JSON.parse(decoded_token)

  # Email is in the 'preferred_username' field
  email = jwt['preferred_username']
end

这个功能很好用,我可以得到用户的电子邮件地址.但今天,这个功能仍然可以正常工作,但JSON我不再包含用户的电子邮件地址.
有人能帮助我吗?我想获得用户的电子邮件地址.谢谢 !

最佳答案
Azure部署了对v2应用程序模型的重大更改,并且您不再默认获取用户信息.

你可以在这里阅读所有相关内容:https://azure.microsoft.com/en-us/documentation/articles/active-directory-v2-preview-oidc-changes/,但总结一下:

> openid范围用于为您提供用户的基本配置文件信息.
>这与OpenID标准不符
> Azure已更改为要求您请求配置文件范围以访问该信息

对于该示例,找到这个位:

# Scopes required by the app
SCOPES = [ 'openid',
           'https://outlook.office.com/mail.read' ]

并将其更改为:

# Scopes required by the app
SCOPES = [ 'openid',
           'profile',
           'https://outlook.office.com/mail.read' ]

转载注明原文:outlook – 无法使用Office 365 REST API登录电子邮件 - 代码日志