我正在使用Javascript(没有Angular)将AAD身份验证添加到我的单页Web应用程序中。初始登录工作正常,但一小时后,令牌过期,我无法使用acquireToken续订。当我仍然使用我的clientID登录时,我已经尝试调用acquireToken并且它工作正常,但是在令牌过期后,我无法续订它。它因“超时因令牌更新操作失败”而失败。
令牌过期后,我运行了这个:
// ADALContext created from calling new AuthenticationContext
// passed in same clientID to acquire token as to create ADALContext
ADALContext.acquireToken(clientID, function (error, token) {console.log(error, token)})
我在AAD中启用了oauth2AllowImplicitFlow。
"keyCredentials": [],
"knownClientApplications": [],
"logoutUrl": null,
"oauth2AllowImplicitFlow": true,
"oauth2AllowUrlPathMatching": true,
不确定我错过了哪一步。谢谢!
编辑:在令牌过期后,如果我运行acquireToken(clientID,func),我会收到“需要用户登录”。但是,如果我调用getCachedUser,我会返回一个用户,之后调用acquireToken会返回超时错误。
答案 0 :(得分:3)
我遇到了同样的问题,并且我的修复工作正常。在app.component.ts中,将此代码添加到ngOnit()。
this.adalService.handleWindowCallback();
this.adalService.acquireToken(this.adalService.config.loginResource).subscribe(token => {
this.adalService.userInfo.token = token;
if (this.adalService.userInfo.authenticated === false) {
this.adalService.userInfo.authenticated = true;
this.adalService.userInfo.error = '';
}
}, error => {
this.adalService.userInfo.authenticated = false;
this.adalService.userInfo.error = error;
this.adalService.login();
});
令牌过期时,将调用应用程序组件,获取令牌会静默刷新令牌。但是this.adalService.userInfo.authenticated
仍然为假,导致重定向或再次调用登录方法。因此,手动将其设置为true可修复重定向错误。 this.adalService.config.loginResource
由adal-angular自己自动为我们设置需要令牌的资源。
还将expireOffsetSeconds: 320
与{p>一起添加到adal配置数据设置中
tenant: configData.adalConfig.tenant,
clientId: configData.adalConfig.clientId,
redirectUri: window.location.origin,
expireOffsetSeconds: 320
expireoffsetseconds会根据我们在令牌实际失效之前指定的时间使令牌失效。
答案 1 :(得分:1)