Из функции Azure (FuncA) я хочу вызвать другую функцию Azure (FuncB) в другом приложении функции от имени текущего пользователя.
Я использую AAD в качестве поставщика аутентификации в обоих приложениях.Приложение FuncA и приложение FuncB используют отдельные регистрации приложений, и я добавил FuncB в качестве «необходимого разрешения» при регистрации приложения FuncA.
Я пытаюсь получить токен на предъявителя, который я могу передать в Func Bно AcquireTokenAsync завершается неудачно с 'AADSTS50000: произошла ошибка при выдаче токена'
Вот код, который я использую:
var oldAuthToken = req.Headers.SingleOrDefault(_ => _.Key == "X-MS-TOKEN-AAD-ID-TOKEN").Value?.FirstOrDefault();
var userAssertion = new UserAssertion(oldAuthToken,
"urn:ietf:params:oauth:grant-type:jwt-bearer",
userName);
var clientId = "<application id of FuncA's App>";
var clientKey = "<Key of FuncA's App>";
var credential = new ClientCredential(clientId, clientKey);
string tenantId = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/tenantid").Value;
var authority = $"https://login.microsoftonline.com/{tenantId}/";
var apiIdentifier = "<Func B's application id>";
var authContext = new AuthenticationContext(authority);
var result = await authContext.AcquireTokenAsync(apiIdentifier, credential, userAssertion);
Редактировать: Работает, если я использую поток учетных данных клиента (т.е.не передавайте userAssertion в последней строке кода), но я на самом деле не хочу, чтобы этот поток был успешным - я хочу контролировать доступ с использованием принципала пользователя.