Не удается подписаться по электронной почте с помощью 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, который я получил, больше не содержит адреса электронной почты пользователя.
Может ли кто-нибудь помочь мне? Я хочу получить адрес электронной почты пользователя. Спасибо!

2 ответа

Решение

Azure развернул серьезное изменение в модели приложения v2, и вы больше не получаете информацию о пользователях по умолчанию.

Вы можете прочитать все об этом здесь: https://azure.microsoft.com/en-us/documentation/articles/active-directory-v2-preview-oidc-changes/, но суммируя:

  • openid область, используемая, чтобы дать вам основную информацию профиля для пользователя.
  • Это не соответствует стандарту OpenID
  • Azure изменен и требует, чтобы вы запрашивали profile возможности получить доступ к этой информации

Для этого примера найдите этот бит:

# 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' ]

Пожалуйста, добавьте профиль и адрес электронной почты в вашей области:

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

Другие вопросы по тегам