使用客户端凭据流

时间:2017-08-19 14:13:41

标签: node.js oauth-2.0 office365

我正在尝试开发一个能够访问我的Outlook.com邮件的节点应用程序。

我试图以一种不需要我输入凭据的方式来做,应用程序将知道它们(用户名和密码)。我并不太担心将它们存储在我的应用程序的配置中。

我使用的是simple-oauth2,但我一直收到错误。以下是尝试检索Oauth令牌的代码:

    const credentials = {
        client: {
            id: this.appId,
            secret: this.appSecret,
        },
        auth: {
            tokenHost: "https://login.microsoftonline.com",
            authorizePath: "common/oauth2/v2.0/authorize",
            tokenPath: "common/oauth2/v2.0/token",
        },
    };

    const oathClient = oauth2.create(credentials);
    const tokenConfig =  {
        username: "zzz@outlook.com",
        password: "xxxxx",
        scope: "Mail.Read",
    };

    const result = await oathClient.ownerPassword.getToken(tokenConfig);
    const token = oathClient.accessToken.create(result);

但是,当调用get token时,我得到以下响应:

   "error": "invalid_grant",
    "error_description": "AADSTS70000: The grant is not supported by this API version\r\nTrace ID: 91935472-5d7b-4210-9a56-341fbda12a00\r\nCorrelation ID: 6b075f4e-b649-493e-a87b-c74f0e427b47\r\nTimestamp: 2017-08-19 14:00:33Z",
    "error_codes": [ 70000],

我已在apps.dev.microsoft.com

中找到该应用程序

为其添加了一个平台(Web API)。 在Microsoft Grah上添加了“Mail.Read”权限

我正在使用我在那里生成的apikey和秘密。

谷歌搜索看起来我发现连接的所有示例都使用客户端证书。是否可以使用API​​凭证来使用API​​?

如果唯一的方法是使用证书,有没有办法可以使用simple-oauth2呢?

1 个答案:

答案 0 :(得分:0)

好吧,看起来我使用了错误的方法。

尝试使用simple-ouath2上的ClientCredentials模块及其workign进行访问:

    const tokenConfig =  {
        scope: "https://graph.microsoft.com/.default",
    };

    const result = await oathClient.clientCredentials.getToken(tokenConfig);