【发布时间】:2020-04-16 14:45:16
【问题描述】:
我正在使用 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 返回超时错误。
【问题讨论】:
-
您获得的初始访问令牌的有效期为 1 小时。一旦过期,调用acquireToken 将不得不去Azure AD 获取新的访问令牌,这就是失败的步骤。如果没有更多信息,很难诊断具体问题,您能否获得提琴手跟踪并检查您从 STS 返回的错误并回发。
-
你的意思是来自请求URL“login.microsoftonline.com/microsoft.onmicrosoft.com/oauth2/…....”的响应头吗?如果是这样,据我所知,我没有收到错误。但是,如果我在 acquireToken 上提供无效的客户端 ID,则会得到以下信息:“Location:http://
/#error=invalid_resource...”。也许我找错地方了?我在上面的问题中添加了一些额外的 cmets。谢谢! -
通过添加对 ADALContext.handleWindowCallback() 的调用来修复问题 :)
-
@ChristinaK 我遇到了同样的问题。你什么时候调用了 handleWindowCallback ?