我目前在使用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/

10-09 15:12