Я создал основное веб-приложение asp.net, которому требуется доступ к нескольким API. Предполагается, что аутентификация происходит через ADFS. Я могу настроить аутентификацию OpenId Connect и получить access_token для одного ресурса API. Как я могу получить access_tokens для оставшихся API, чтобы я мог вызвать их или один access_token с несколькими аудиториями?
Обычно я должен добавлять области, но кажется, что ADFS имеет другое значение для областей, чем IdentityServer, и вместо этого используетОпция «Ресурс».
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = "oidc";
})
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme)
.AddOpenIdConnect("oidc", options =>
{
options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.Authority = appSettings.Authority;
options.ClientId = appSettings.ClientId;
options.ClientSecret = appSettings.ClientSecret;
options.SaveTokens = true;
foreach (var scope in appSettings.Scopes)
{
options.Scope.Add(scope);
}
options.ResponseType = OpenIdConnectResponseType.CodeIdToken;
options.RequireHttpsMetadata = true;
options.Resource = appSettings.TemplateServiceIdentifier;
});
Тогда я могу, при необходимости, просто позвонить
var token = await _httpContextAccessor.HttpContext.GetTokenAsync(OpenIdConnectParameterNames.AccessToken);
, затем добавить токен в качестве носителя и проверить его в порядке. И это прекрасно работает для каждого отдельного ресурса (API), если я добавлю его с самого начала. Однако я не могу получить токены доступа для более чем одного ресурса одновременно.
Возможно ли это даже с ADFS? Должен ли я получить один токен доступа для всех ресурсов API (поскольку поставщик удостоверений одинаков для всех API) для нескольких аудиторий?