我目前在ADAL.js(v1.0.7)库中遇到问题。当我在一段时间后加载我的应用程序时,我收到一条登录错误,指出“Nonce与undefined不同”。查看代码后,我想知道我是否错过了最佳实践。据我所知,我遵循了@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()。
我知道为什么nonce不同,但我想“重置”它或导致全新的登录。
请告诉我我能提供的其他相关信息。
答案 0 :(得分:1)
更新
似乎已在您提供的博客文章中提供了解决方案。以下是报价。
诀窍是回到权威要求代币,就像我们一样 在往返应用程序场景中执行,但在隐藏的iframe中执行此操作。如果 仍然存在与权威机构的会议(可能是 由cookie表示 - 但它是域中的cookie 权限,而不是应用程序)我们将能够获得一个新的令牌 任何UX。甚至还有一个特定的参数,prompt = none,它允许 Azure AD知道我们想要在没有UX的情况下获取令牌,如果是的话 无法完成我们想要收到错误。这是请求。
上一个回答:
我没有完全遵循您的代码所做的事情。但是从博客文章来看,您似乎正在使用OAuth 2.0
当你说有一段时间不活动时发生错误时,我的猜测是令牌无效,你需要刷新令牌。不确定是否有办法让你刷新它。但通常在服务器端进行身份验证后,OAuth 2.0提供程序将向您移交令牌和刷新令牌,如果令牌过期,您可以使用刷新令牌获取新令牌。