通过office365域(nodejs)

时间:2017-03-21 18:59:26

标签: node.js azure oauth npm exchange-server

尝试在office365上读取/写入/更新域内每个用户的电子邮件。我使用Azure Active Directory和Azure应用程序。我是帐户管理员。我在这个阶段已经开启了一大堆权限,因为不确定哪些是必要的。

我在Nodejs中编程。所以......

  1. 使用OAuth对Azure进行身份验证,以便我可以访问自己的应用程序。 < - WORKS。
  2. 请求此网址对帐户的管理员权限: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/[userEmailAddress@domain.com/messages。我将令牌作为bearer传递。 这是问题,我得到

    {   "错误":{     "代码":" InvalidAuthenticationToken",     " message":"访问令牌验证失败。",     " innerError":{       " request-id":" [request-id]",       " date":" 2017-03-21T17:31:24"     }   } }

  5. 我尝试使用这个网址https://outlook.office.com/api/v2.0的几个网址,例如outlook API。不过我认为这只适用于简单的OAuth,无论如何都不会这样做。

    如果有人能解释如何让访问令牌有效,那就太棒了。

    仅供参考,我也是,同时测试npm库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});    
        })
    

    我可以获得用户列表。所以也许我是愚蠢的,不知怎的,我可以用它来阅读用户的电子邮件?

    由于

1 个答案:

答案 0 :(得分:0)

也许您在请求标头中犯了错误以获取访问令牌。

如您所见,我通过向https://login.microsoftonline.com/common/oauth2/v2.0/token端点发送POST请求并将值mail.read传递给此请求中的scope参数来获取令牌。

enter image description here

现在,我可以使用该令牌收到用户的电子邮件。

enter image description here