我想针对Azure进行身份验证以声明访问令牌并将其用于Graph API。所以我完成了作业,并从本指南开始

https://docs.microsoft.com/en-us/graph/auth-v2-service

我能够成功进行身份验证。但是代码量很大。这是我为身份验证编写的代码:

https://pastebin.com/7sYWyhZJ

如果脚本需要访问当前会话令牌,则只需调用getAuthenticationInfo函数。由于大量的代码,我想知道我的代码是多余的还是不正确的。

一些研究使我进入了MSAL.js(我认为),它可以为我处理身份验证内容。 MSAL使用的方法不同于我上面发布的链接中的指南。我从这个普通的JS演示代码开始(我只有一个演示帐户,因此凭据无关紧要)

const msal = require('msal');

async function start() {
    const clientId = 'bec52b71-dc94-4577-9f8d-b8536ed0e73d';
    const clientSecret = 'OV/NkBIWH7d3G/BGyJQN3vxQA]fT6qK@';
    const tenant = '2c1714e1-1030-4da9-af5e-59630d7fe05f';
    const scope = 'https://graph.microsoft.com/.default';
    const grantType = 'client_credentials';

    const msalConfig = {
        auth: {
            clientId
        }
    };

    const msalInstance = new msal.UserAgentApplication(msalConfig);

    const tokenRequest = {
        scope,
    };

    try {
        const tokenResponse = await msalInstance.acquireTokenSilent(tokenRequest);
        const { accessToken } = tokenResponse;

        console.log(accessToken);
    } catch (error) {
        throw error;
    }
}
start();


我想知道我的登录凭据应该放在哪里。但是当我运行代码时,出现以下错误


  ReferenceError:窗口未定义


该代码似乎尝试访问浏览器存储。但是我的代码在Node环境中运行。因此,有人会很高兴告诉我如何从基于MSAL方法的第一个链接的代码段中传输代码吗?

据我了解,MSAL应该为我解决问题,我不需要自己编写身份验证代码,并且可以缩短我自己的代码。

提前致谢!



更新资料

基于Allen Wus的答案,我尝试了ADAL.js,此代码似乎正常运行

const { AuthenticationContext } = require('adal-node');

const clientId = 'bec52b71-dc94-4577-9f8d-b8536ed0e73d';
const clientSecret = 'OV/NkBIWH7d3G/BGyJQN3vxQA]fT6qK@';
const tenant = '2c1714e1-1030-4da9-af5e-59630d7fe05f';
const authorityHostUrl = 'https://login.windows.net';
const authorityUrl = `${authorityHostUrl}/${tenant}`;
const resource = 'https://graph.microsoft.com';
const context = new AuthenticationContext(authorityUrl);

context.acquireTokenWithClientCredentials(resource, clientId, clientSecret, (error, tokenResponse) => {
    if (error) {
        throw error;
    }

    console.log(tokenResponse);
});


我唯一没有得到的是resource是什么。随时添加评论以解释它:)

最佳答案

您收到此错误“ ReferenceError:未定义窗口”,因为在Node上不存在浏览器。

MSAL.js旨在用于在Web浏览器中运行的客户端JavaScript,例如在单页面应用程序中。换句话说,它当前不支持nodejs。

对于您的控制台应用程序,您可能需要查看MSAL .Net

或者您可能对ADAL for nodejs感兴趣。

08-27 15:35