В настоящее время я создаю API, который должен использовать Identity Framework и OpenIddict для фактического входа пользователя.
На самом деле я создаю простой билет аутентификации, подобный этому
private AuthenticationTicket CreateTicket(OpenIdConnectRequest connectRequest, OAuthApplication application)
{
// Create a new ClaimsIdentity containing the claims that
// will be used to create an id_token, a token or a code.
var identity = new ClaimsIdentity(
OpenIddictServerDefaults.AuthenticationScheme,
OpenIdConnectConstants.Claims.Name,
OpenIdConnectConstants.Claims.Role);
// Use the client_id as the subject identifier.
identity.AddClaim(OpenIdConnectConstants.Claims.Subject, application.ClientId,
OpenIdConnectConstants.Destinations.AccessToken,
OpenIdConnectConstants.Destinations.IdentityToken);
identity.AddClaim(OpenIdConnectConstants.Claims.Name, application.DisplayName,
OpenIdConnectConstants.Destinations.AccessToken,
OpenIdConnectConstants.Destinations.IdentityToken);
// Create a new authentication ticket holding the user identity.
var ticket = new AuthenticationTicket(
new ClaimsPrincipal(identity),
new AuthenticationProperties(),
OpenIddictServerDefaults.AuthenticationScheme);
ticket.SetScopes(connectRequest.GetScopes());
ticket.SetResources("resource_server");
return ticket;
}
Однако теперь я установил значение «resource_server» в билете, есть ли способ его получить? т.е. Я могу получить все Scope внутри моего ClaimsPrinicpal, но я не смог найти способ получить AuthenticationProperties билета.





However now I set the value "resource_server" on the ticket, is there any way to retrieve it?
Конечно, если вы используете формат токена по умолчанию и обработчик проверки OpenIddict, вот пример:
public async Task<IActionResult> GetAudiences()
{
var ticket = (await HttpContext.AuthenticateAsync(OpenIddictValidationDefaults.AuthenticationScheme))?.Ticket;
if (ticket != null)
{
return Json(ticket.GetAudiences());
}
return NoContent();
}
@ChristianSchmitt, что именно вы подразумеваете под «контекстом»? В данном случае HttpContext — это контекст. Стоит отметить, что результаты проверки подлинности автоматически кэшируются стеком проверки подлинности ASP.NET Core, поэтому эта операция выполняется синхронно, если вы украсили свое действие [Authorize(…)].
это то, что я хотел знать, на самом деле я думал, что есть накладные расходы, чтобы вызвать HttpContext.AuthenticateAsync дважды.
Есть ли способ прочитать это из контекста напрямую? т.е. Я уже аутентифицирован через аннотацию?