Angular MSAL AuthError中的错误:身份验证中出现意外错误。:哈希不包含状态

时间:2020-06-27 20:43:52

标签: angular azure-ad-b2c msal

我已使用图形API在B2C中成功创建了用户。创建用户后,我想向用户发送电子邮件以重置密码(使用下面的密码重置链接),然后使用MSAL 1.3.2登录到angular Web应用程序。我已经在Azure B2C实例中创建了b2c密码重置策略。我单击Run the user flow进行测试。网址(我想通过电子邮件发送)如下

https://tenant.b2clogin.com/tenant.onmicrosoft.com/oauth2/v2.0/authorize?p=B2C_1_passwordreset1& client_id = xxxxxxxxxxxxxxxxxxxxxxxxxxx&nonce = defaultNonce&redirect_uri = http:// localhost:4203&scope = openid&response_type = id_token&prompt = login

我成功重置了密码,然后使用一个Id令牌将其重定向到应用程序,如下图所示,在浏览器地址栏中

http:// localhost:4203 /#id_token = eyJ0eXAiOiJKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

使用MSAL配置的我的角度应用程序无法处理此问题,并且在控制台中出现错误

ERROR AuthError:身份验证中出现意外错误。:哈希不包含状态。

我的b2C配置在sample中看起来完全像这样

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

当您直接将用户发送到B2C时,会发生此问题,而没有先在应用中初始化MSAL 。 MSAL始终在其请求中将一个state参数传递给auth端点,并期望它随令牌一起返回,然后在其中确认state与初始请求中发送的相同。

因此,当使用门户中的立即运行链接并将回复网址设置为您的应用时,总是会发生这种情况。请使用https://jwt.ms作为回复网址,或通过您的应用启动流程,以便正确初始化MSAL。

答案 1 :(得分:-1)

据我所知,由于URL长度的限制,某些浏览器会出现此错误。尝试将storeAuthStateInCookie设置为“ true”以将缓存保存在cookie中,以解决浏览器中的受信任区域限制。

export const msalConfig: Configuration = {
    auth: {
        clientId: "e760cab2-b9a1-4c0d-86fb-ff7084abd902",
        authority: b2cPolicies.authorities.signUpSignIn.authority,
        redirectUri: "http://localhost:6420/",
        postLogoutRedirectUri: "http://localhost:6420/",
        navigateToLoginRequestUrl: true,
        validateAuthority: false,
      },
    cache: {
        cacheLocation: "localStorage",
        storeAuthStateInCookie: true, 
    },
}

或者尝试使用其他浏览器。