Auth0 часто требует, чтобы пользователи проходили аутентификацию дважды - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть клиентское веб-приложение, созданное с использованием Angular 7, которое использует Auth0 (auth0-js v9.8.2) для аутентификации.Мы требуем, чтобы пользователи входили в систему, используя имя пользователя / пароль, а затем многофакторный, используя Guardian / text / phone call.Все это прекрасно работает.Проблема в том, что мы видим, что иногда пользователям необходимо во второй раз проходить проверку подлинности / многофакторность сразу после того, как они перенаправлены в приложение со страницы входа Auth0.Я видел это один или два раза сам, но теперь, когда я пытаюсь отладить эту проблему, я не могу повторить проблему.Тем не менее, я вижу в журналах, что несколько пользователей в день испытывают это неудобство.

Вот некоторые фрагменты из моего кода.Если бы я знал, как копировать, я бы попытался отладить, но я не могу даже сделать это сейчас, хотя это все еще происходит в настоящее время с другими.

Первое, что я делаю в app.component.ts, вызывает handleAuthentication() и требует от пользователей аутентификации, если они этого еще не сделали.

constructor(private auth: Auth, private dataService: DataService) {
    this.auth.handleAuthentication().then((res: any) => {
        if (this.auth.isAuthenticated()) {
            this.authenticated = true;
        } else {
            this.auth.auth0.authorize();
        }
    });
}

Вот функция handleAuthentication(), который разрешается только после вызова parseHash () и установки сеанса.

public handleAuthentication(): Promise<any> {
    return new Promise((resolve, reject) => {
        this.auth0.parseHash({ _idTokenVerification: false }, (err, authResult) => {
            if (authResult && authResult.accessToken && authResult.idToken) {
                window.location.hash = '';
                this.setSession(authResult);
            } else if (err) {
                console.log(err);
            }
            resolve();
        });
    });
}

Вот мои auth0 настройки на случай, если это будет полезно

auth0 = new auth0.WebAuth({
    domain: '<domain>',
    clientID: '<clientID>',
    redirectUri: environment.callbackURL,
    audience: '<audience>',
    responseType: 'token id_token',
    scope: 'openid'
});

Мой толькоПредполагается, что это как-то связано с ошибкой parseHash ().Есть несколько других вещей, которые мне кажутся интересными.

  1. В других примерах я не вижу, чтобы { _idTokenVerification: false } передавался в parseHash(), но в какой-то момент он был добавлен по какой-то причине
  2. Я видел, как другие говорили о проблемах с передачей id_token в responseType, но мы используем этот токен для проверки срока действия.Если это может быть причиной проблемы, я могу найти обходной путь

Я не могу просто предположить, что это проблемы, потому что я не могу воспроизвести основную проблему с этими изменениями или без них.

Любая помощь или совет?

...