Не удается подписаться по электронной почте с помощью 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']