Я настраиваю свою функцию Azure для аутентификации в своем собственном клиенте следующим образом...
При регистрации приложения для ресурса API отображается следующим образом.
После этого, если я нажму на него в браузере, он сам попросит меня пройти аутентификацию и затем сработает. Большой! Сейчас я пытаюсь выполнить это в Postman и получаю ошибку 401, что бы я ни делал.
Почтальон входит в систему как собственный субъект-служба (1ec5483f-8eb9-4851-af81-ff89eb3e25ad) и разрешения API установлены следующим образом
Затем я установил токен OATH 2 в клиенте POSTMAN - и он получил тот, который кажется действительным.
Я явно намеренно скрыл секрет. Область действия установлена на api://31f5b60c-5de3-4135-85ec-08edfbce042e/General.Read. URL-адрес токена доступа = https://login.microsoftonline.com/mytenant/oauth2/v2.0/authorize . URL-адрес токена = https://login.microsoftonline.com/my tenant/oauth2/v2.0/authorize
Расшифрованный токен выглядит так:
{
"aud": "api://31f5b60c-5de3-4135-85ec-08edfbce042e",
"iss": "https://sts.windows.net/mytenant/",
"iat": 1695814282,
"nbf": 1695814282,
"exp": 1695818220,
"acr": "1",
"aio": "ATQAy/8UAAAAS8sRzKTgrNlGhofLEKYO7xweUqSUmLrqQWFN8i0o/qsoeBqavqK7oQXJt19EOeBk",
"amr": [
"pwd"
],
"appid": "1ec5483f-8eb9-4851-af81-ff89eb3e25ad",
"appidacr": "1",
"family_name": "XXX",
"given_name": "XXX",
"ipaddr": "XXX",
"name": "XXX",
"oid": "1c11db5e-dc85-4c4b-882e-b8dd40206255",
"onprem_sid": "S-1-5-21-57989841-1450960922-725345543-4904",
"rh": "0.ARcAdKQVoiCS8E-TJSBRMiYmswy29THjXTVBhewI7fvOBC4XACo.",
"roles": [
"Trigger.Function"
],
"scp": "General.Read",
"sub": "q7tSjCuR5mf56ekcpYI4xEZ6Kdo_zfXkT2oBYEsyohQ",
"tid": "a215a474-9220-4ff0-9325-2051322626b3",
"unique_name": "[email protected]",
"upn": "[email protected]",
"uti": "0W4WOPhO406S8ahy4GkmAA",
"ver": "1.0"
}
Опять мне это бросается в глаза. Но когда я звоню
Это ВСЕГДА 401. Где я ошибаюсь?
вот изображение URL-адреса функции... без кода


Я создал приложение-функцию Azure AD и включил аутентификацию, как показано ниже:

В приложении Azure AD доступен API:

Добавлены разрешения API:

Теперь я попытался сгенерировать токен доступа и аутентифицировать приложение-функцию, используя следующие параметры:
GET https://testrukfunctapp1.azurewebsites.net/api/HttpTrigger1
Callback URL : RedirectURL
Auth URL : https://login.microsoftonline.com/TenantID/oauth2/v2.0/authorize
Access Token URL : https://login.microsoftonline.com/TenantID/oauth2/v2.0/token
ClientID : ClientID
Client Secret : ***
Scope : api://xxx/user_impersonation
Я получил ту же ошибку (401 Неавторизованный), как показано ниже:

Чтобы устранить ошибку, обязательно передайте заголовок x-functions-key:

Значение x-functions-key — это значение кода в URL-адресе функции:

После передачи заголовка я могу успешно аутентифицировать приложение-функцию, используя токен доступа, как показано ниже:
GET https://testrukfunctapp1.azurewebsites.net/api/HttpTrigger1
x-functions-key : FunctionURLCodeValue
Content-Type : application/json

Можете ли вы зайти в свое приложение-функцию -> выбрать функцию -> нажать «Получить URL-адрес функции» -> скопировать URL-адрес функции?
Можете вставить скриншот?
Использование 2.0.... добавит изображение выше
После вопросительного знака в URL-адресе функции в моем ответе нет обновленного кода?
И вы вручную предоставили API при регистрации приложения или он был предоставлен автоматически после создания регистрации приложения в приложении-функции?
нет кода после ? вообще - это конец коробки. Я добавил открытый API вручную
Когда я выбрал регистрацию создания нового приложения в приложении-функции, API-интерфейс API был создан автоматически. Следовательно, вы получаете ошибку 401
Начинаем с нуля и позволяем порталу заставить идентификатор работать! Спасибо
У меня нет значения кода в URL-адресе моей функции... откуда оно взялось? моя функция очень проста, анонимна. const { приложение } = require('@azure/functions'); app.http('testHttp1', { методы: ['GET', 'POST'], authLevel: 'anonymous', обработчик: async (запрос, контекст) => { context.log(
Http function processed request for url "${request.url}"); const name = request. query.get('name') || await request.text() || 'world'; return { body:Hello, ${name}!}; } });