我正在努力利用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 中的此应用程序注册表在图形 API 上具有"登录并读取用户配置文件"权限Microsoft。
this.adal.acquireToken("https://graph.microsoft.com", function(error, token) {
console.log(error);
console.log(token);
});
错误将按如下方式写入控制台:"令牌续订操作因超时而失败";而st 令牌写入为空对象。在使用Chrome检查页面时,简要查看"网络"选项卡会发现以下资源:
authorize?response_type=token&client_id=xxxxx&resource=xxxxx&redirect_uri=http://localhost:8080(.....)
所述资源的状态为 302。
有什么线索吗?谢谢!
好的..似乎我已经想通了,在这篇文章的帮助下,点击查看文章,点击查看非常酷的信息
我在登录回调中替换了以下代码
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();
希望这对运行此问题的其他人有所帮助!