Javascript ADAL.js-“文件”;“Nonce”与“undefined”不同;

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/',

我目前在使用ADAL.js(v1.0.7)库时遇到问题。当我在相当长的一段时间后加载我的应用程序时,我会收到一个登录错误,说明“Nonce与undefined不一样”。查看代码后,我想知道我是否缺少一个最佳实践。据我所知,我遵循了@vibronet的建议。我应该刷新用户配置文件,还是注销,或者做其他事情

我的配置如下所示:

        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需要多长时间才能过期,我怎么知道它已经过期了?