Получить имя файла cookie аутентификации ASP.NET Core Identity

Во время запуска я настраиваю файл cookie аутентификации личности:

services.ConfigureApplicationCookie(x =>
{
  x.Cookie.Name = "foo";    // default is ".AspNetCore.Identity.Application"
  // other config...
});

Мне нужна информация об этом файле cookie во время выполнения, поэтому в какой-то контроллер я вставляю IOptions<CookieAuthenticationOptions>, а затем пытаюсь получить имя файла cookie:

var cookieName = cookieAuthenticationOptions.Value.Cookie;

Это дает ".AspNetCore." вместо "foo". Другие свойства этого объекта также неверны: все они кажутся значениями по умолчанию.

Почему это происходит и как мне получить действительный экземпляр этого объекта параметров?

Не могли бы вы поместить имя файла cookie в файл appsettings.json и просто ссылаться на IConfiguration в обоих местах?

BenderBoy 10.04.2024 12:49

@BenderBoy Спасибо. Я делаю что-то подобное - по необходимости. Но это хак, и я бы хотел этого избежать. Кроме того, для всех остальных параметров конфигурации файлов cookie установлены значения по умолчанию. Я очень удивлен, что это не работает.

lonix 10.04.2024 12:51

Вы пробовали вводить CookieAuthenticationOptions вместо IOptions?

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

Ответы 1

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

ASP.NET Core Identity использует именованный подход IOptions, но DI по умолчанию IOptions предоставляет безымянный экземпляр по умолчанию (в данном случае) CookieAuthenticationOptions. Это означает, что экземпляр, который вы получаете от DI, отличается от экземпляра, настроенного с помощью ConfigureApplicationCookie.

Чтобы получить доступ к именованному экземпляру IOptions, вы можете использовать IOptionsSnapshot или IOptionsMonitor (документы). Вот пример того, как получить доступ к экземпляру ASP.NET Core Identity CookieAuthenticationOptions:

  1. Вставьте IOptionsMonitor<CookieAuthenticationOptions> в конструктор контроллера.

  2. В действии используйте следующий код:

    var cookieName = cookieAuthenticationOptions
       .Get(IdentityConstants.ApplicationScheme)
       .Cookie.Name;
    

Спасибо, это сработало. Всякий раз, когда мне нужна конфигурация запуска, я обычно добавляю IOptions<T>, поэтому я сделал то же самое и здесь. Я не рассматривал проблему именования.

lonix 10.04.2024 13:30

Мне любопытно, можно ли узнать, какие объекты параметров называются, а какие нет? Как в данном случае вы узнали, что нужный мне объект options был одним из названных? (Полагаю, можно просто попробовать оба пути, если знать об этой «подвохе».)

lonix 10.04.2024 13:33

Я сталкивался с этим раньше при работе с AuthN, который имеет концепцию имен схем и, следовательно, требует возможности настройки нескольких экземпляров. В частности, здесь ConfigureApplicationCookie использует перегрузку...

Kirk Larkin 10.04.2024 13:37
IServiceCollection.Configure, который принимает названия параметров. В целом, я не думаю, что именованные параметры используются так часто, поэтому, вероятно, вы не будете сталкиваться с этим часто.
Kirk Larkin 10.04.2024 13:37

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