Как получить объект msal из расположения кеша: локальное хранилище? - PullRequest
0 голосов
/ 18 ноября 2018

Перво-наперво, я ниже уровня новичка, когда дело доходит до Nodejs / msal / azure b2c, и я пытаюсь понять поток. Я начал с этого образца здесь: https://azure.microsoft.com/en-us/resources/samples/active-directory-b2c-javascript-msal-singlepageapp/ Я использую msal.js с Azure Ad B2C в приложении Nodejs. Я перенаправляю пользователя после входа с помощью политики входа на другую страницу, где у меня есть другие политики.

// index.html

var clientApplication = new Msal.UserAgentApplication(applicationConfig.clientID, applicationConfig.authority, authCallback, { logger: logger, cacheLocation: 'localStorage' });
            function authCallback(errorDesc, token, error, tokenType) {
                if (token) {
                    logMessage(token + ":" + token);
                }
                else {
                    logMessage(error + ":" + errorDesc);
                }
            }

Это моя функция входа в onclick в index.html. Метод 'test (accessToken)' выполняет перенаправление на маршруты внутреннего сервера js, где я сохраняю токен доступа в переменной сеанса, а метод выполняет рендеринг на другую страницу (test.ejs), где хранятся мои другие политики b2c.

function login() {

        clientApplication.loginPopup(applicationConfig.b2cScopes).then(function (idToken) {
            clientApplication.acquireTokenSilent(applicationConfig.b2cScopes).then(function (accessToken) {            
                test(accessToken);
            }, function (error) {
                clientApplication.acquireTokenPopup(applicationConfig.b2cScopes).then(function (accessToken) {
                    updateUI();
                }, function (error) {
                    logMessage("Error acquiring the popup:\n" + error);
                });
            })
        }, function (error) {
            logMessage("Error during login:\n" + error);
        });

    }

Теперь мой вопрос заключается в том, как мне получить текущее состояние объекта clientApplication Msal.UserAgentApplication в моем другом представлении (test.ejs), чтобы сделать что-то вроде этого:

clientApplication.acquireTokenSilent(applicationConfig.b2cScopes).then(function (accessToken) {
                logMessage(accessToken);
            }

1 Ответ

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

Я полагаю, что вы должны в основном обрабатывать все свои политики (которые для меня фактически являются входом в систему с подписью и забытым паролем) в том же месте в вашем коде, что и в любом случае вы будете перенаправлены на веб-сайт Microsoft.

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();
    }
}
...