Вызов веб-API из реагирующего SPA с использованием отсутствующей области реагирования-ада-мсала - PullRequest
0 голосов
/ 02 апреля 2020

Я звоню в защищенный веб-интерфейс от веб-приложения реагировать SPA. И спа, и веб-API были зарегистрированы в AzureAD, и каждый зарегистрирован друг для друга через «Expose API» и «Права доступа API».

После проверки подлинности клиента, затем перед вызовом веб-API позвоните (ожидайте this.props.provider.getAccessToken ()) создан для получения токена доступа. Поставщик аутентификации настроен как:

export const authProvider = new MsalAuthProvider(
    {
        auth: {
            authority: "https://login.microsoftonline.com/common",
            clientId: "xxxx-xxxx-xxxxx",
            postLogoutRedirectUri: window.location.origin,
            redirectUri: window.location.origin,
            validateAuthority: true,
            navigateToLoginRequestUrl: false
        },
        system: {
            logger: logger as any
        },
        cache: {
            cacheLocation: "sessionStorage",
            storeAuthStateInCookie: false
        }
    },
    {
        scopes: ["openid", "user.read", "api://xxxx-xxxxx-xxxxx/user_impersonation"]
    },
    {
        loginType: LoginType.Redirect,
        tokenRefreshUri: window.location.origin + "/auth.html"
    }
);

Где "api: // xxxx-xxxxx-xxxxx / user_impersonation" - это запрос области веб-API. Авторизация для веб-API завершается неудачно с 401, потому что при проверке возвращенный токен доступа не имеет области веб-API в заявках.

1 Ответ

0 голосов
/ 02 апреля 2020

Токен доступа AAD действителен только для одного API, поэтому убедитесь, что при запросе токена вы указываете только область действия для своего API. Затем AAD предоставит вашему приложению токен для вашего API. В запросе на аутентификацию можно указать области действия для нескольких API, но когда вы запрашиваете токены, укажите только области для одного API.

В массиве областей у вас есть user.read, предназначенный для MS График API.

...