Ошибка при выходе из MSAL.JS в приложении Javascript / Angular 6 SPA с использованием B2C - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть одно приложение Javascript SPA, использующее MSAL.JS для аутентификации на Azure AD B2C, и другое приложение Angular 6 SPA, использующее MSAL для Angular на Azure AD B2C.

В обоих приложениях при выходе из системы выдается ошибка.

Идентификатор корреляции: 6de6e068-7b07-4d24-bac4-c1af3131815b Метка времени: 2018-09-25 16: 16: 20Z AADB2C90272: Параметр id_token_hint не был указан в запросе.Пожалуйста, предоставьте токен и попробуйте снова.

Для выхода из системы MSAL имеет очень простой API выхода из системы, который не принимает никаких параметров, так как я могу предоставить id_token_hint?Я что-то пропустил?Есть ли какой-либо параметр конфигурации, который я должен предоставить при введении MsalModule в Angular Application.Или что-нибудь подобное в приложении Javascript для Msal.UserAgentApplication.

1 Ответ

0 голосов
/ 02 декабря 2018

Я в основном использую последнюю версию "msal": "^ 0.2.3", это моя служба аутентификации, в app.module не требуется настройка, и выход из системы работает отлично:

import { Injectable } from '@angular/core';
import { environment } from '../../environments/environment';
import * as Msal from 'msal';
import { User } from "msal/lib-commonjs/User";
import { ApiService } from './api.service';
import { BackendRoutes } from './backend.routes';

@Injectable()
export class AuthenticationService {
    private _clientApplication: Msal.UserAgentApplication;
    private _authority: string;

constructor(private apiService: ApiService, private backendRoutes: BackendRoutes) {
    this._authority = `https://login.microsoftonline.com/tfp/${environment.tenant}/${environment.signUpSignInPolicy}`;

    this._clientApplication =
        new Msal.UserAgentApplication(
            environment.clientID,
            this._authority,
            this.msalHandler,
            {
                cacheLocation: 'localStorage',
                redirectUri: window.location.origin
            });
}

msalHandler(errorDesc: any, token: any, error: any, tokenType: any) {
    let userAgent: Msal.UserAgentApplication = <any>(this);
    if (errorDesc.indexOf("AADB2C90118") > -1) {
        //Forgotten password
        userAgent.authority = `https://login.microsoftonline.com/tfp/${environment.tenant}/${environment.passResetPolicy}`;
        userAgent.loginRedirect(environment.b2cScopes);

    } else if (errorDesc.indexOf("AADB2C90077") > -1) {
        //Expired Token, function call from interceptor with proper context
        this.logout();
    }
}

addUser(): void {
    if (this.isOnline()) {
        this.apiService.post(this.backendRoutes.addUser).subscribe();
    }
}

login(): void {
    this._clientApplication.loginRedirect(environment.b2cScopes);
}

logout(): void {
    this._clientApplication.logout();
}

getAuthenticationToken(): Promise<string> {
    return this._clientApplication.acquireTokenSilent(environment.b2cScopes)
        .then(token => token)
        .catch(error => {
            return Promise.reject(error);
        });
}

И связанный с ним перехватчик:

export class AuthenticationHttpInterceptor implements HttpInterceptor {

    constructor(private authenticationService: AuthenticationService) {
    }

    intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        return from(this.authenticationService.getAuthenticationToken()
            .then(token => {
                return req.clone({
                    setHeaders: {
                        Authorization: `Bearer ${token}`
                    }
                });
            })
            .catch(err => {
                this.authenticationService.msalHandler(err,null,null,null);
                return req;
            }))
            .switchMap(req => {
                return next.handle(req);
            });
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...