У меня есть функция Azure, защищенная Azure Active Directory.
Я могу успешно вызвать приложение из браузера при условии, что я вошел в систему.
Теперь, что Я хочу вызвать эту функцию из приложения, которое не использует имя пользователя и пароль для аутентификации, а скорее как идентификатор клиента доверенного приложения и секрет клиента.
Я пытался использовать для этой цели то же самое приложение (скажем, ApplicationA ), которое было создано для защиты приложения функции. Я зашел в раздел «Регистрация приложений», нашел приложение, созданное путем настройки Azure провайдера аутентификации Active Directory в настройках аутентификации / авторизации приложения функции ( ApplicationA ), и установил для него секрет клиента.
Теперь я могу получить токен, используя указанный идентификатор клиента приложения и сгенерированный секрет.
Но когда я пытаюсь вызвать функцию с использованием этого токена, я получаю ошибку 401.
Я пытался выполнить ту же операцию с недавно созданным приложением в регистрации приложений (скажем, ApplicationB ), но с тем же результатом я все еще получаю 401.
Я даже пытался добавьте Роль Reader для этого приложения в Подписках, но затем снова - 401 при вызове Function с токеном.
Я знаю, что-то вроде разрешений API в настройках приложения. Поэтому я попытался добавить разрешение для ApplicationB в ApplicationA user_impersonation, но оно также не работает, так что это не так.
Так как мне предоставить разрешение для зарегистрированного приложения, для которого я могу получить токен, чтобы я мог использовать этот токен для вызова функции?
EDIT:
Я использую следующий код для получения токена:
using Microsoft.Identity.Client;
string ClientId = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX";
string ClientSecret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
string TenantId = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX";
string Authority = $"https://login.microsoftonline.com/{TenantId}";
string[] scopes = new string[] { "https://graph.microsoft.com/.default" };
IConfidentialClientApplication app = ConfidentialClientApplicationBuilder.Create(ClientId)
.WithClientSecret(ClientSecret)
.WithAuthority(new Uri(Authority))
.Build();
AuthenticationResult result = await app.AcquireTokenForClient(scopes).ExecuteAsync();
string token = result.AccessToken;