错误:无效状态auth0

时间:2018-01-15 21:51:04

标签: angular auth0

我正在尝试在我的angular 5应用程序中实现auth0,遵循本教程: https://toddmotto.com/angular-2-authentication

该注册表工作正常,但当我尝试登录时,我在控制台中获得以下内容:enter image description here

这是我的身份验证服务:

import { Injectable } from '@angular/core';

// We want to avoid any 'name not found'
// warnings from TypeScript
declare var Auth0Lock: any;


@Injectable()
export class AuthService {
    private lock

    constructor() {
        // These stuff should be exported into other files
        this.lock = new Auth0Lock('id...',
            'url...')
    }

    login() {
        this.lock.show((error: string, profile: Object, id_token: string) => {
            if (error) {
                console.log(error);
            } else {
                console.log(profile)
                localStorage.setItem('profile', JSON.stringify(profile));
                localStorage.setItem('id_token', id_token);
            }
        });
    }

    logout() {
        localStorage.removeItem('profile');
        localStorage.removeItem('id_token');
    }
}

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

state参数是一个任意状态值,将在重定向之间进行维护。减轻XSRF攻击以及完成身份验证过程后可能需要的任何上下文信息(如返回URL)很有用。

当您使用Auth0.js和/或Lock库触发身份验证请求时,Auth0.js将在浏览器的localStorage中存储现时和状态(您提供的现时或它自动生成的现时和状态)。这样做是为了在服务器响应返回时(在parseHash或on('authenticated')事件中)对它们进行验证。

缺少/无效的状态错误可能是由以下几种情况引起的:

  1. /授权请求是通过与目标回调URL不同的方案(HTTP / HTTPS)执行的,因为未在不同方案之间共享localStorage。

  2. 以相同状态(组件可能正在重新呈现)连续两次调用parseHash方法,因为在检索值时,Auth0.js将删除存储的信息。

  3. 在将登录页面添加为书签后尝试登录的用户。这是因为应该为每个请求生成一个新的状态值。您可以设置默认的“租户/应用程序”登录URL,以在检测到这种情况后将用户重定向到here

  4. 使用SAML身份提供程序(IdP)启动的登录流程不带enabledIdPInitiated标志,有关here的更多信息。

  5. 使用自定义域的SAML服务提供程序(SP)发起的流程,其中SAML提供程序将Auth0域用于AssertionConsumerService(ACS)URL。

请确保已按照上述要点正确配置了应用程序。如果这些方法不能解决问题,请共享存储库,以便我们尝试重现该问题。