我目前在使用ADAL.js(v1.0.7)库时遇到麻烦。在相当长的一段时间后加载我的应用程序时,出现登录错误,指出“ Nonce与未定义不相同”。查看完代码后,我想知道我是否缺少最佳实践。据我所知,我遵循了@vibronet here的建议。我应该刷新用户个人资料,还是注销,还是其他?
我的配置如下:
window.config = {
instance: 'https://login.microsoftonline.com/',
tenant: 'blahblahblah.onmicrosoft.com',
clientId: 'GUID',
postLogoutRedirectUri: window.location.origin,
cacheLocation: 'localStorage'
};
this.authContext = new window.AuthenticationContext(window.config);
var isCallback = this.authContext.isCallback(window.location.hash);
this.authContext.handleWindowCallback();
if (isCallback && !this.authContext.getLoginError()) {
window.location = this.authContext._getItem(this.authContext.CONSTANTS.STORAGE.LOGIN_REQUEST);
}
如果长时间不活动,则在调用this.authContext.login()之后会发生错误。为了得到错误,我调用this.authContext.getLoginError()。
我知道为什么现时有所不同,但我想“重置”它或引起全新的登录。
请让我知道我可以提供哪些其他相关信息。
最佳答案
更新:
您提供的博客帖子中似乎已提供了解决方案。下面是报价。
诀窍是回到授权机构索取令牌,就像我们
在往返应用程序场景中执行此操作,但在隐藏的iframe中执行此操作。如果
仍然存在与授权机构的会话(可能是
以Cookie表示–但它是
权限,而不是应用程序的权限),我们将无需获取新令牌即可
任何UX。甚至还有一个特定的参数,prompt = none,它使
Azure AD知道我们要在没有UX的情况下获取令牌,如果有的话
无法完成,我们想找回错误。这是请求。
先前的答案:
我不完全遵循您的代码的功能。但是从博客文章中看来,您正在使用OAuth 2.0
当您说有一段时间不活动时发生错误时,我猜测令牌已无效,因此您需要刷新令牌。不知道是否有一种方法可以刷新它。但是通常在服务器端通过身份验证后,OAuth 2.0提供程序会向您提供一个令牌和一个刷新令牌,如果令牌已过期,则可以使用刷新令牌来获取一个新令牌。
关于javascript - ADAL.js-“Nonce与未定义的含义不同”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34686460/