ОТВЕТ: Для всех, кто ищет этот ответ, я смог получить нужный токен, указав веб-API в областях вызова MSAL acquToken, например:
let token = msal.acquireToken({
scopes: [ 'myFunctionApp.azurewebsites.net/user_impersonation' ]
})
После выполнения этого Я использовал токен в качестве токена Bearer в заголовке Authentication. Я могу использовать это в дополнение к вызову конечных точек MS Graph. Я нашел эту информацию в тихом отдаленном месте:
https://docs.microsoft.com/en-us/azure/active-directory/develop/msal-acquire-cache-tokens#request -specifi c -scopes-for-web-api
Большое спасибо @StanleyGong за его помощь, которая в конечном итоге привела к ответу.
/////
Последние несколько дней я искал, как эффективно обезопасить Vue SPA подается из веб-приложения Azure, вызывающего функциональное приложение Azure. У меня включена функция Easy Auth как для веб-приложения, так и для приложения-функции, и я вызываю конечную точку /.auth/me
, чтобы получить токен идентификатора, который, как я прочитал, может использоваться в качестве токена-носителя. Поэтому я вызываю /.auth/me
и использую возвращенный id_token
для создания заголовка авторизации, но я все равно получаю 401 Unauthorized
при вызове приложения функции.
Код, получающий id_token из / .auth / me и добавление его в качестве заголовка по умолчанию для всех вызовов Ax ios (я понимаю, что это нужно будет обновить ... Я собираюсь создать все эти логи c после того, как получу один вызов работает):
let authUrl = '/.auth/me';
let response = await axios.get(authUrl);
let token = response.data[0].id_token;
axios.defaults.headers.common['Authorization'] = "Bearer " + token;
Я вижу, что токен используется в заголовке авторизации в запросе, который следует сразу за разделом выше:
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Authorization: Bearer eyJ0eXAiO...
Я видел этот пост и пытался используйте часть этой информации, в том числе сообщение в блоге Криса Гиллума (что было полезно, но все равно не помогло мне): Аутентификация для Azure Функции
Любые предложения о том, как чтобы это заработало? Я чувствую, что я рядом, но я не совсем там. Если это не правильный путь к go по этому поводу, любой совет также будет полезен.
Я ужасно неопытен в идентичности в целом, поэтому я продолжаю оборачиваться терминологией, которая не Не помогает несоответствие в документации.
Кроме того, есть ли способ протестировать этот материал без развертывания кода при каждом изменении? Было бы здорово проверить это, получив как-то токен из магазина без кода, находящегося на сервере веб-приложений ... я думаю, желаемое, но просто удивляющееся.
РЕДАКТИРОВАТЬ: я только что понял, что все посты, которые я прочитал, предполагают, что токен доступа возвращается с /.auth/me
, но я его не получаю. Возвращенный JSON выглядит следующим образом, и это все:
id_token: "eyJ0eXA...7_A"
provider_name: "aad"
user_claims: [{typ: "aud", val: "2...fa"},…]
user_id: "<<my email address>>"
ДРУГОЕ РЕДАКТИРОВАНИЕ: я обнаружил, что могу получить токен с помощью MSAL, но информация, содержащаяся в нем, немного отличается от информации из /.auth/me
. Использование любого токена в качестве маркера носителя по-прежнему приводит к 401. Я заметил, что в настройках аутентификации AAD для приложений URL-адрес издателя был другим. Один был sts. windows. net, а другой - логин. windows. net. У обоих был идентификатор арендатора после них. Не уверен, что это изменило ситуацию, но я попытался установить для них одно и то же значение, и это не помогло.
/.auth/me
токен (очищенный, конечно):
{
"aud": "2fe...fa", (AAD app id)
"iss": "https://sts.windows.net/<< AD tenant id >>/",
"iat": 15785xxx,
"nbf": 15785xxx,
"exp": 15785xxx,
"aio": "AVQAq/...UQ=",
"amr": [
"pwd",
"mfa"
],
"family_name": "<< my last name >>",
"given_name": "<< my first name >>",
"ipaddr": "<< my ip >>",
"name": "<< my full name >>",
"nonce": "e32a...48",
"oid": "a0...0e",
"sub": "LNu...8l8",
"tid": "f14...2ca",
"unique_name": "<< my email >>",
"upn": "<< my email >>",
"uti": "i9O...TAQ",
"ver": "1.0"
}
Маркер доступа MSAL:
{
"aud": "000...000", (mostly 0s...not sure what this id is)
"iss": "https://sts.windows.net/<< AD tenant id >>",
"iat": 15785xxx,
"nbf": 15785xxx,
"exp": 15785xxx,
"acct": 0,
"acr": "1",
"aio": "AVQAq/8O...ZZ12s=", (different than above)
"amr": [
"pwd",
"mfa"
],
"app_displayname": "<< app name in AAD app registration >>",
"appid": "<< app GUID from AAD >>",
"appidacr": "0",
"family_name": "<< my last name >>",
"given_name": "<< my first name >>",
"ipaddr": "<< my ip >>",
"name": "<< my full name >>",
"oid": "a0...0e", (same as above)
"platf": "3",
"puid": "10...1B",
"scp": "User.Read profile openid email",
"signin_state": [
"kmsi"
],
"sub": "WuX...L3A",
"tid": "f14...2ca", (tenant id, same as above)
"unique_name": "<< my email >>",
"upn": "<< my email >>",
"uti": "UD...AA",
"ver": "1.0",
"xms_st": {
"sub": "LNu...8l8"
},
"xms_tcdt": 14...37
}