ADAL JS - 获取令牌:由于超时,令牌更新操作失败

Nun*_*nte 5 javascript timeout token adal

我正在努力利用 AD 的使用对多个应用程序进行身份验证和授权,并且我目前正在研究如何实现上述过程。

这是用于 Web 浏览器到 Web 应用程序的流程。

我创建了一个 AuthenticationContext 实例并使用它来登录,并且这些功能正常。(为了演示目的简化了代码组织)

this.adal = new AuthenticationContext({
    tenant: this.tenantId,
    clientId: this.clientId,
    redirectUri: this.redirectUri,
    callback: this.loginCallback,
    popUp: true
});

this.adal.login();
Run Code Online (Sandbox Code Playgroud)

当我尝试获取令牌时,行为变得可疑。可以说 AD 中此应用程序的注册表在 Microsoft Graph API 上具有“登录并读取用户配置文件”权限。

this.adal.acquireToken("https://graph.microsoft.com", function(error, token) {
    console.log(error);
    console.log(token);
});
Run Code Online (Sandbox Code Playgroud)

错误写入控制台如下:“Token更新操作因超时而失败”;whilest 标记被写入为空对象。在使用 Chrome 检查页面时简要查看“网络”选项卡会发现这样的资源:

authorize?response_type=token&client_id=xxxxx&resource=xxxxx&redirect_uri=http://localhost:8080(.....)
Run Code Online (Sandbox Code Playgroud)

所述资源的状态为 302。

有什么线索吗?谢谢!

Nun*_*nte 2

好吧..看来我已经弄清楚了,在这篇文章的一点帮助下,点击查看文章,点击查看非常酷的信息

我在登录回调中替换了以下代码

this.adal.acquireToken("https://graph.microsoft.com", function(error, token) {
    console.log(error);
    console.log(token);
});
Run Code Online (Sandbox Code Playgroud)

为了这:

var cachedToken = this.adal.getCachedToken(client_id_goes_here);
    if (cachedToken) {
        this.adal.acquireToken("https://graph.microsoft.com", function(error, token) {
            console.log(error);
            console.log(token);
        });
    }
Run Code Online (Sandbox Code Playgroud)

最后,只需将这行代码添加到 acquireToken 方法重定向到页面后运行的函数中:

this.adal.handleWindowCallback();
Run Code Online (Sandbox Code Playgroud)

希望这对遇到此问题的其他人有所帮助!