ADAL.js-使用id_token获取Microsoft Graph Access令牌

Jon*_*ill 5 azure-active-directory adal adal.js microsoft-graph

我正在尝试将Azure AD登录和Graph API集成到我的angular2网站中。

我已经成功实现了ADAL登录和重定向,它是围绕此处的一个有用的博客文章构建的

从中,我检索了adalservice可以访问的id_token参数。当前,这是通过简单的context.login()并在重定向中捕获令牌来实现的。

当我使用此令牌尝试访问Microsoft Graph时,收到InvalidAuthenticationToken响应,指出Access Token validation failure

具有获得的“ access_token”的API调用

我是新手,因此可能是我的电话本来是错误的,或者我在AD中缺少某些权限,或者我的应用程序注册表缺少权限。我已经看到我可能需要请求具有足够范围的访问令牌,但是我可以找到任何此类示例。

有没有人使用此adalService库获取用于Graph API的令牌?

Jon*_*ill 4

我找到了解决问题的方法。

我使用了错误的令牌。我必须专门为 Graph API 获取一个令牌。这意味着我必须先登录,然后this.context.acquireToken()像下面这样调用:

this.context.acquireToken("https://graph.microsoft.com", function (error, id_token) {

    if (error || !id_token) {
        console.log('ADAL error occurred: ' + error);
    } 
    else {
            this.graphAccessToken = id_token;
            //Call graph API
    }
    }.bind(this)
);
Run Code Online (Sandbox Code Playgroud)

看来这个过程有 2 次调用是很重要的。也许有人可以阐明我是否可以在登录时立即获取具有 Graph API 范围的令牌。也许可以通过在 Azure AD 中设置应用程序所需的权限来实现。

  • 您已经发现了正确的模式!login() 将为您提供一个 id 令牌并“登录”用户,然后必须调用 acquireToken() 来获取资源的访问令牌。计划在下一版本的 adal.js 中重载 acquireToken 来执行交互式请求。这意味着您可以绕过登录调用!关注 [Github](https://github.com/AzureAD/azure-activedirectory-library-for-js) 上的发布。 (3认同)