Javascript ADAL.js-“文件”;“Nonce”与“undefined”不同;
我目前在使用ADAL.js(v1.0.7)库时遇到问题。当我在相当长的一段时间后加载我的应用程序时,我会收到一个登录错误,说明“Nonce与undefined不一样”。查看代码后,我想知道我是否缺少一个最佳实践。据我所知,我遵循了@vibronet的建议。我应该刷新用户配置文件,还是注销,或者做其他事情 我的配置如下所示:Javascript ADAL.js-“文件”;“Nonce”与“undefined”不同;,javascript,azure,single-page-application,azure-active-directory,adal,Javascript,Azure,Single Page Application,Azure Active Directory,Adal,我目前在使用ADAL.js(v1.0.7)库时遇到问题。当我在相当长的一段时间后加载我的应用程序时,我会收到一个登录错误,说明“Nonce与undefined不一样”。查看代码后,我想知道我是否缺少一个最佳实践。据我所知,我遵循了@vibronet的建议。我应该刷新用户配置文件,还是注销,或者做其他事情 我的配置如下所示: window.config = { instance: 'https://login.microsoftonline.com/',
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()后会发生错误。为了获得错误,我调用此.authContext.getLoginError()
我明白为什么nonce是不同的,但我想“重置”它或导致一个全新的登录发生
请告知我可以提供的其他相关信息。更新:
看起来你们提供的博客文章中已经提供了解决方案。以下是报价
诀窍是回到当局那里要求一个代币,就像我们想要的那样
在往返应用程序场景中执行,但在隐藏的iframe中执行。如果
仍然存在与管理局的现有会话(可能是
由cookie表示–但它是
授权,而不是应用的)我们将能够获得一个新的代币没有
任何用户体验。甚至还有一个特定的参数,prompt=none,它允许
Azure AD知道我们想要在没有UX的情况下获得令牌,如果
无法完成,我们想找回一个错误。这是请求
先前的答复:
我没有完全理解你的代码的作用。但从博文中可以看出,您似乎正在使用OAuth2.0
当你说错误发生时,有一段时间的不活动,我猜是令牌已无效,你将需要刷新令牌。不确定是否有方法刷新它。但通常在服务器端,一旦您通过身份验证,OAuth 2.0提供商将向您移交一个令牌和一个刷新令牌,如果令牌过期,您可以使用刷新令牌来获取一个新的令牌。如果您可以包含一些代码,这将很好。否则将很难看出问题出在哪里。我已编辑了原始帖子以添加更多详细信息。此外,如果我清除了网站的localStorage,那么它将正常工作。您能够解决它吗?是的,我的理解是,当您调用authContext.login()时,函数调用将自动处理此问题。相反,当我调用该函数时,我得到一个错误,说明nonce令牌不正确。在这个图书馆里还有其他我应该打的电话吗?据我所知,他们是正确的。如果我更改了它们,那么我根本无法进行身份验证。啊,我明白了。所以你的意思是,在你验证并尝试再次登录后,你会看到那个错误。然后回到我的回答,你必须自己更新你的证件。我认为登录功能不适合你。是的,你的建议对我来说似乎是有效的。ADAL.js似乎是一个开源项目。试着向他们提出你的建议有人解决了这个问题吗?我怎样才能得到正确的nonce?或者nonce需要多长时间才能过期,我怎么知道它已经过期了?