2016-02-24 90 views
6

我跟隨此帖子http://dev.office.com/code-samples-detail/2142和Ruby獲取用戶的電子郵件地址。下面是代碼:使用Office 365 REST API無法登錄電子郵件

# 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我沒有包含用戶的電子郵件地址了。
有人可以幫助我嗎?我想獲取用戶的電子郵件地址。謝謝 !

回答

10

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' ] 
+0

謝謝你的快速回復。明天我來公司的時候我會試試看。 –

+0

工作。謝謝 ! –

+0

嗨,我們使用API​​來抓取日曆事件,然後使用與該事件關聯的電子郵件。我們現在是否必須註冊一個付費帳戶才能得到這個? –

2

請添加會員和電子郵件在您的範圍:

SCOPES = [ '的OpenID', '輪廓', '電子郵件', 'https://outlook.office.com/mail.read']

+0

工作。謝謝 ! –

+0

如果我不使用mail.read,我無法獲取用戶的個人資料信息,我不想要求郵件讀取權限 – Diego

相關問題