MSAL. js collectTokenSilent результирующий нулевой токен - PullRequest
0 голосов
/ 27 мая 2020

Я работаю с существующим одностраничным приложением, которое мы недавно перевели с поставщика аутентификации On-Prim на Azure Active Directory и MSAL. js Мы используем WindowsAzureActiveDirectoryBearerAuthenticationMiddleware на бэкэнде для защиты конечных точек WebAPI .

API безопасен, пользователи могут входить в систему, и все работает. Проблема начинается примерно в то время, когда токен истекает на отметке в один час. Метод tokenSilent возвращает токен с нулевым accessToken.

Я обнаружил эту проблему на Guthub.

https://github.com/AzureAD/microsoft-authentication-library-for-js/issues/736

Короткие и грязные запросы токенов, которые относятся к приложению с одной областью действия, будут возвращает только обновленный id_token, но не обновленный accessToken. Решение состоит в том, чтобы добавить дополнительную область. Если я это сделаю, появится сообщение об ошибке: Идентификатор клиента может быть предоставлен только как одна область

Любая помощь будет отправлена ​​

var clientApplication;

// Enter Global Config Values & Instantiate MSAL Client application
window.msalConfig = {
    auth: {
            clientId: 'obfuscated'
            , authority: "https://login.microsoftonline.com/common"
            , validateAuthority: true
            , redirectUri: window.location.protocol + "//" + window.location.host + "/msal.html" //http://localhost:58541/msal.html
            }
    , cache: {
            cacheLocation: "localStorage"
            }
    , graphScope: {
            scopes: ["https://graph.microsoft.com/User.Read", "https://graph.microsoft.com/Mail.Send" ]
            }
    , appScope: {
            scopes: ["obfuscated"]
            }
};

axios.interceptors.request.use(async function (options) {

    var scope = window.msalConfig.appScope;     //based on where the request is going, will need to decide what token to get.
    var tokenType = "AuthToken";                //this probably ins't needed after rewriting all existing jquery.ajax hooks
    if (options.url.includes("microsoft")) {
        scope = window.msalConfig.graphScope;
        tokenType = "GraphToken";               //this probably ins't needed after rewriting all existing jquery.ajax hooks
    }

    self.Loading({ State: true, Title: "Working on it..." });

    options.headers['Authorization'] = "Bearer " + await tokenSilent(tokenType, scope);

    return options;
}, function (error) {
    console.log('Axios Request Error: ', error);
    return promise.reject(error);
});


          async function tokenSilent(tokenType, scope) {
            console.log('Axios Request VERBOS: main.js.tokenSilent');
            return await clientApplication.acquireTokenSilent(scope)
                .then(async function (token) {
                    Cookies.set(tokenType, token.accessToken); // "Bearer " +
                    self.LoginID(token.account.userName);
                    return token.accessToken;
                }, async function (error) {
                    return await tokenPopup(scope);
                    console.log(error);
                });
        };

        async function tokenPopup(tokenType, scope) {
            console.log('Axios Request VERBOS: main.js.tokenPopup');
            return await clientApplication.acquireTokenPopup(scope)
                .then(async function (token) {
                    Cookies.set(tokenType, token.accessToken); //"Bearer " +
                    self.LoginID(token.account.userName);
                    return token.accessToken;
                }, async function (error) {
                    return await loginPopup(scope);
                    console.log(error);
                });
        };

        async function loginPopup(tokenType, scope) {
            console.log('Axios Request VERBOS: main.js.loginPopup');
            window.location.hash = "/auth";
        };

Есть ли способ продлить жизненный цикл токена моего корпоративного приложения, или мой код неправильный и он не получает обновленный токен?

1 Ответ

0 голосов
/ 12 июня 2020

Вы можете увеличить срок службы токена для своего корпоративного приложения. Мы используем для создания политики в PowerShell путем подключения к Azure AD вручную в соответствии с документом

Теперь мы можем использовать политику CA для продления или изменения срока жизни токена для приложения. . См. Документ .

...