ADAL.js - “Nonce与undefined不同”

时间:2016-01-08 21:33:27

标签: javascript azure single-page-application azure-active-directory adal

我目前在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不同,但我想“重置”它或导致全新的登录。

请告诉我我能提供的其他相关信息。

1 个答案:

答案 0 :(得分:1)

更新

似乎已在您提供的博客文章中提供了解决方案。以下是报价。

  

诀窍是回到权威要求代币,就像我们一样   在往返应用程序场景中执行,但在隐藏的iframe中执行此操作。如果   仍然存在与权威机构的会议(可能是   由cookie表示 - 但它是域中的cookie   权限,而不是应用程序)我们将能够获得一个新的令牌   任何UX。甚至还有一个特定的参数,prompt = none,它允许   Azure AD知道我们想要在没有UX的情况下获取令牌,如果是的话   无法完成我们想要收到错误。这是请求。

上一个回答:

我没有完全遵循您的代码所做的事情。但是从博客文章来看,您似乎正在使用OAuth 2.0

当你说有一段时间不活动时发生错误时,我的猜测是令牌无效,你需要刷新令牌。不确定是否有办法让你刷新它。但通常在服务器端进行身份验证后,OAuth 2.0提供程序将向您移交令牌和刷新令牌,如果令牌过期,您可以使用刷新令牌获取新令牌。