Можно ли получить токен Azure AD V1 с помощью MSAL? - PullRequest
0 голосов
/ 25 января 2019

В настоящее время я настраиваю ADD с MSAL для своего приложения.Проблема, с которой я сталкиваюсь, заключается в том, что API настроен на прием токенов Azure AD V1, но с моей текущей настройкой MSAL я продолжаю получать Azure AD V2.

Другие люди в моей команде используют ADAL, но мыхочу перейти на MSAL.Я уверен, что делаю что-то не так, потому что трудно поверить, что обратной совместимости нет.

Это мой Msal Config:

import * as Msal from 'msal';

export const applicationConfig = {
    clientID: process.env.REACT_APP_MSAL_CLIENT_ID,
    authority: process.env.REACT_APP_AUTHORITY_TENANT,
    graphScopes: ['user.read'],
    graphEndpoint: process.env.REACT_APP_GRAPH_ENDPOINT,
};

/**
 * will get the call back once the API is complete
 * (either complete or failure), redirects flows.
 * Is called after the authentication request is completed
 * successfully/failure
 *
 * @param {*} errorDesc
 * @param {*} token
 * @param {*} error
 * @param {*} tokenType
 */
const tokenReceivedCallback = async (errorDesc, token, errorMsg) => {
    try {
        if (token) console.log('Success!');
    } catch (error) {
        throw new Error(`${errorMsg}:${errorDesc}`);
    }
};

/**
 * Instantiate UserAgentApplication
 */
const userAgentApplication = new Msal.UserAgentApplication(
    applicationConfig.clientID,
    applicationConfig.authority,
    tokenReceivedCallback,
    {
        cacheLocation: process.env.REACT_APP_CACHE_LOCATION,
        redirectUri: process.env.REACT_APP_REDIRECT_URI,
    },
);

/**
 * Log user in
 * Checks if there is no user and if there is no
 * callback occuring within the window url which throws into
 * infinite loop, then login, and redirect to SSO login
 * @param {*} graphScopes
 */
export const signIn = async graphScopes => {
    console.log(graphScopes);
    /**
     * avoid duplicate code execution on page load in case of iframe and popup window
     */
    if (!userAgentApplication.getUser() && !userAgentApplication.isCallback(window.location.hash)) {
        /**
         * login site, and go directly to SSO
         */
        await userAgentApplication.loginRedirect(graphScopes, process.env.REACT_APP_DOMAIN);
        /**
         * acquireTokenSilent method makes a silent request to ADD to obtain an access token.
         * ADD returns an access token containing the user consented scopes to allow
         * the app to securely call the api
         */
        await userAgentApplication.acquireTokenSilent(graphScopes);
    }
};

/**
 * Logs user out
 */
export const logOut = () => userAgentApplication.logout();

Это то, что я получаю, когдаЯ использую jwt.ms: enter image description here

Заранее спасибо!

1 Ответ

0 голосов
/ 29 января 2019

Да, можно запросить токен доступа V1 из конечной точки V2.Тип токена доступа (v1 или v2), который выдается вашему клиентскому приложению, определяется регистрацией приложения API ресурса .Как отмечают другие, ваш пример кода запрашивает область действия Microsoft Graph, а регистрация приложения Microsoft Graph настроена на прием токенов v2.Вы можете определить тип токенов, которые ваш API настроен на прием, просмотрев регистрацию приложения.В portal.azure.com откройте « Регистрация приложений (предварительный просмотр) », перейдите в раздел « Manifest » и найдите свойство « accessTokenAcceptedVersion ».Если для него установлено значение null или 1 , то все клиентские приложения, запрашивающие токены доступа для вызова этого ресурса, получат токен доступа v1 (независимо от того, используют ли они MSAL или ADAL для запроса доступа).token).

Распространенным шаблоном вызова для приложения ADAL, вызывающего API ресурса v1, было предоставление ресурса URI в качестве области действия.Это указывало конечной точке на выдачу токена доступа для всех разрешений, настроенных при регистрации приложения API ресурса.MSAL (который использует конечную точку v2) позволяет запрашивать любую область независимо от того, находится ли она в статическом списке областей регистрации приложения для ресурса.Чтобы получить то же поведение, что и ADAL (который использует конечную точку v1), добавьте «.default» к URI ресурса (например, «https://contoso.onmicrosoft.com/V1TodoListService/.default")

». На Ignite я дал демонстрацию существующего списка дел.Служба list, которая принимает только токены доступа v1, и я просматриваю всю конфигурацию портала моего нового клиентского приложения MSAL, чтобы запросить токены доступа v1 и вызвать эту службу. Смотрите его здесь: https://youtu.be/77A47CfNqIU?t=3120

...