2017-03-21 50 views
0

嘗試讀取/寫入/更新office365域中每個用戶的電子郵件。我正在使用Azure Active Directory和Azure應用程序。我是帳戶管理員。在這個階段,我已經開啓了一大堆權限,因爲不確定哪些是必要的。Azure委託郵件跨Office365域(nodejs)

我在Nodejs中編程。因此...

  1. 對Azure使用OAuth進行身份驗證,以便我可以訪問我自己的應用程序。 < - 作品。
  2. 請求管理員權限對該帳戶在此URL:https://login.microsoftonline.com/common/adminconsent?client_id='+clientID+'&redirect_uri'+uri其中clientIDuri被替換。這將我重定向到針對Microsoft平臺的身份驗證。你可以在這裏看到我已要求(在調試)的所有權限: enter image description here

  3. 一旦我接受它返回我到我的應用程序,它要求從令牌的權限:https://login.windows.net/[my-app-tenant-id]/oauth2/token。這返回訪問令牌。到目前爲止這麼好

  4. 然後,我嘗試使用此令牌讀取我的組織電子郵件的用戶(例如我,但有一些用戶,我已經嘗試過)。它到達:https://graph.microsoft.com/v1.0/[[email protected]/messages。我通過令牌作爲bearer。 這是問題,我得到

    { 「錯誤」:{ 「代碼」: 「InvalidAuthenticationToken」, 「消息」: 「訪問令牌驗證失敗」, 「innerError」:{ 「請求-id「: 」[請求-ID]「, 」日期「: 」2017-03-21T17:31:24「 } } }

我已與一對夫婦網址嘗試這種,例如outlook API,帶有這個URL https://outlook.office.com/api/v2.0。不過,我認爲這是針對簡單的OAuth,無論如何都不會以這種方式工作。

如果任何人都可以解釋如何讓訪問令牌有效,那就太棒了。

僅供參考,我也是,同時測試了故宮圖書館azure-graphapi和使用:

var clientID = '[client id]' 
    var clientSecret = '[client secret]' 
    var tenant = '[tenant id]' 
    var graph = new GraphAPI(tenant, clientID, clientSecret); 
    graph.get('users/', function(err, user) { 
     resp.json({users: user});  
    }) 

我能得到用戶的列表。所以也許我是愚蠢的,不知何故,我可以用它來閱讀用戶的電子郵件?

謝謝

回答

0

也許你在請求標頭中弄錯了獲取訪問令牌。

正如您所看到的,我通過發送POST請求到https://login.microsoftonline.com/common/oauth2/v2.0/token端點並將值mail.read傳遞給此請求中的scope參數來獲得令牌。

enter image description here

現在,我能夠得到與該令牌的用戶的電子郵件。

enter image description here

+0

所以我覺得這是一個標準的OAuth ....我試圖創建一個應用程序,可以在廣告,而不是在用戶登錄代表用戶的行爲和訪問自己的數據。 ... – amlwwalker