MSAL Angular 7: реализация сброса пароля - PullRequest
0 голосов
/ 21 января 2019

Я использую эту библиотеку MSAL (https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-angular) для аутентификации.

Для сброса пароля мой код выглядит следующим образом:

// app.component.ts

constructor(private authService: MsalService)
{
 if (this.forgotPassword()) {
            this.navigateToForgotPassword();
        } else {
        this.authService
            .acquireTokenSilent(MsalHelperService.getMsalConfigurationSettingValue('consentScopes'))
            .then(token => {
                if (this.authService.getUser()) {
                    this.userService.setLoggedIn(true);
                    this.navigateToLandingPage();
                } else {
                    this.userService.setLoggedIn(false);
                    this.login();
                }
            })
            .catch(error => {
                this.userService.setLoggedIn(false);
                this.login();
            });
    }
...
}

// Determine if user clicked "Forgot Password"
forgotPassword() {
        const storage = this.authService.getCacheStorage();
        const authError: string = storage.getItem('msal.login.error') ? storage.getItem('msal.login.error') : null;
        if (authError && authError.indexOf('AADB2C90118') > -1) {
            return true;
        }

        return false;
    }

navigateToForgotPassword() {
        this.authService.authority = this.authService.authority.replace('b2c_1a_signupsignin', 'b2c_1a_passwordreset');
        this.authService.loginRedirect(MsalHelperService.getMsalConfigurationSettingValue('consentScopes'));
    }

До этого момента все работало хорошо.

После сброса пароля пользователь возвращается к app.component, который затем вызывает loginRedirect () для отображения формы входа.

При возврате в app.component регистрируется следующая ошибка:

"Отказано в отображении ' https: //...signupsignin/' в кадре, поскольку для параметра X-Frame-Options установлено значение" deny "".

В идеале я хотел бы, чтобы пользователь автоматически входил в систему после сброса пароля.

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

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Я сделал что-то подобное, основываясь на вашем ответе:

if (payload._errorDesc && payload._errorDesc.indexOf('AADB2C90118') !== -1) {
    console.log('Set recovery flow to true');
    console.log('Redirecting to password recovery page');
    localStorage.setItem('custom.recovery.password.flow', 'true');
    msalService.authority = `https://login.microsoftonline.com/tfp/${environment.tenant}/b2c_1_reset_password/v2.0/`;
    msalService.loginRedirect();
  }
});
this.broadcastService.subscribe('msal:loginSuccess', payload => {
  if(localStorage.getItem('custom.recovery.password.flow') === 'true'){
    console.log('Set recovery to false');
    console.log('Redirecting to login page');
    localStorage.setItem('custom.recovery.password.flow', 'false');
    msalService.logout();
  }
});
0 голосов
/ 07 февраля 2019

Автоматический вход в систему по-прежнему является проблемой, но она была устранена путем выхода из системы loginSyccess.

this.loginSuccessSubscription = this.broadcastService.subscribe('msal:loginSuccess', payload => {
                // Temporary solution to avoid 'X-Frame-Options' error on password reset. MSAL not yet supporting auto login after password reset.
                if (this.resetPassword()) {
                    this.logout();
                }

               ...
            });

    // Check claim
    resetPassword() {
            return document.referrer.toLowerCase().indexOf('b2c_1a_passwordreset') > -1;
        }
...