Как реализовать поток от имени в функции Azure? Сбой «AADSTS50000: при выдаче токена произошла ошибка» - PullRequest
0 голосов
/ 23 января 2019

Из функции 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 в последней строке кода), но я на самом деле не хочу, чтобы этот поток был успешным - я хочу контролировать доступ с использованием принципала пользователя.

...