ADAL JS - 获取令牌:令牌更新操作因超时而失败

时间:2017-08-21 16:58:38

标签: javascript timeout token access 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();

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

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

错误按如下方式写入控制台:“由于超时而导致令牌续订操作失败”; whilest令牌被写为空对象。在使用Chrome检查网页时,简要查看“网络”标签会显示以下资源:

authorize?response_type=token&client_id=xxxxx&resource=xxxxx&redirect_uri=http://localhost:8080(.....)

所述资源的状态为302。

有任何线索吗?谢谢!

1 个答案:

答案 0 :(得分:1)

好的..似乎我已经弄明白了,在本文click for article以及click for very cool info

的帮助下得到了一些帮助

我在登录回调

中替换了下面的代码
this.adal.acquireToken("https://graph.microsoft.com", function(error, token) {
    console.log(error);
    console.log(token);
});

为此:

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);
        });
    }

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

this.adal.handleWindowCallback();

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