Дополнительная заявка отсутствует в токене ADFS OnBehalfOf

Я использую MSAL с ADFS2019 и пытаюсь вызвать внутренний API от имени прошедшего проверку подлинности пользователя моего веб-приложения. У меня есть действительный токен доступа с некоторыми дополнительными утверждениями для идентификации пользователя:

      {
  "aud": "https://SRV",
  "iss": "[***REMOVED***]",
  "iat": 1687181262,
  "nbf": 1687181262,
  "exp": 1687184862,
  "email": "user1@mydomain.com",
  "winaccountname": "user1@mydomain.com",
  "anchor": "sub",
  "sub": "user1@mydomain.com",
  "apptype": "Confidential",
  "appid": "https://SRV",
  "authmethod": "http://schemas.microsoft.com/ws/2008/06/identity/authenticationmethod/windows",
  "auth_time": "2023-06-19T12:11:56.653Z",
  "ver": "1.0",
  "scp": "email user_impersonation profile openid"
}

Я использую этот токен как UserAssertion, когда вызываю метод AcquireTokenOnBehalfOf. Вызов успешен, но в полученном токене нет абсолютно никаких претензий, которые могли бы помочь мне идентифицировать пользователя (только приложение), вызывающего API:

      {
  "aud": "api://API",
  "iss": "[***REMOVED***]",
  "iat": 1687181215,
  "nbf": 1687181215,
  "exp": 1687184815,
  "apptype": "Confidential",
  "appid": "https://SRV",
  "auth_time": "2023-06-19T12:11:56.653Z",
  "authmethod": "http://schemas.microsoft.com/ws/2008/06/identity/authenticationmethod/windows",
  "ver": "1.0",
  "scp": "profile user_impersonation openid email"
}

Вот код, который я использую для генерации второго токена:

      var token = await HttpContext.GetTokenAsync("access_token");
var resource = _configuration["ADFS:Resource"];

var client = ConfidentialClientApplicationBuilder.Create(_configuration["ADFS:ClientID"]).
            WithAdfsAuthority(_configuration["ADFS:Instance"]).
            WithClientSecret(_configuration["ADFS:ClientSecret"]).Build();
var userAssertion = new UserAssertion(token, "urn:ietf:params:oauth:grant-type:jwt-bearer");
var result = await client.AcquireTokenOnBehalfOf(new[] { $"{resource}/openid", $"{resource}/email" , $"{resource}/user_impersonation" }, userAssertion)
            .WithClaims("sub, upn")
            .ExecuteAsync();

var httpClient = _httpClientFactory.CreateClient("WebAPI");
httpClient.BaseAddress = new Uri(_configuration["ServiceUrl"]);
httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("bearer", result.AccessToken);
Weather = await httpClient.GetFromJsonAsync<IEnumerable<WeatherServiceResponse>>("/WeatherForecast");

return;

Что мне не хватает? Вероятно, это глупая ошибка, но я новичок во всем этом, и у меня не так много хорошей документации о том, как решить проблему с ADFS(но много с AAD).

Спасибо.

0 ответов

Другие вопросы по тегам