我正在努力利用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。
有任何线索吗?谢谢!
答案 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();
希望这对于遇到此问题的其他人有帮助!