我正在使用 Javascript(不带 Angular)向我的单页 Web 应用程序添加 AAD 身份验证。初始登录工作正常,但一个小时后,令牌过期,我无法使用acquireToken 更新它。当我仍然使用我的客户端 ID 登录时,我尝试调用 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)})
Run Code Online (Sandbox Code Playgroud)
我在 AAD 中启用了 oauth2AllowImplicitFlow。
"keyCredentials": [],
"knownClientApplications": [],
"logoutUrl": null,
"oauth2AllowImplicitFlow": true,
"oauth2AllowUrlPathMatching": true,
Run Code Online (Sandbox Code Playgroud)
不知道我错过了什么步骤。谢谢!
编辑:令牌过期后,如果我运行acquireToken(clientID,func),我会收到“需要用户登录”。但是,如果我调用 getCachedUser,我会返回一个用户,然后调用acquireToken 返回超时错误。
实际上,js 的 adal 会将登录信息缓存到会话存储或浏览器的本地存储中,具体取决于您在代码中的配置。你可以使用chrome的开发工具看一下这个表:

所以cachaed user是从 解码的adal.idtoken。这样就可以获取缓存的用户了。而且根据源码acquireToken,在更新access token之前会检查登录用户是否存在,所以会出现这个User login is required问题。
要绕过此问题,您可以getCachedUser()在运行之前运行函数acquireToken()以更新访问令牌。
| 归档时间: |
|
| 查看次数: |
6249 次 |
| 最近记录: |