AuthenticationTicket SetResources/SetProperties, как я могу их использовать?

В настоящее время я создаю 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 билета.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
206
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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();
}

Есть ли способ прочитать это из контекста напрямую? т.е. Я уже аутентифицирован через аннотацию?

Christian Schmitt 20.02.2019 23:34

@ChristianSchmitt, что именно вы подразумеваете под «контекстом»? В данном случае HttpContext — это контекст. Стоит отметить, что результаты проверки подлинности автоматически кэшируются стеком проверки подлинности ASP.NET Core, поэтому эта операция выполняется синхронно, если вы украсили свое действие [Authorize(…)].

Kévin Chalet 21.02.2019 14:35

это то, что я хотел знать, на самом деле я думал, что есть накладные расходы, чтобы вызвать HttpContext.AuthenticateAsync дважды.

Christian Schmitt 22.02.2019 11:39

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