Мое приложение ASP.NET Core использует OpenID Connect для входа пользователя в систему. После входа пользователя в систему я хочу получить файл cookie, который был установлен до входа в систему. Прямо сейчас я использую событие OnTicketReceived промежуточного программного обеспечения OIDC. Чтобы получить доступ к HttpContext, я использую вспомогательный класс, который использует объект IHttpContextAccessor. Проблема в том, что переменная myCookie остается нулевой. Как я могу получить значение cookie после входа в систему?
Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
...
services.AddAuthentication(options =>
{
...
})
.AddOpenIdConnect("oidc", options =>
{
...
options.Events = new OpenIdConnectEvents
{
OnTicketReceived = e =>
{
if (e.Principal.Identity.IsAuthenticated)
{
string myCookie = HttpHelper.HttpContext.Request.Cookies[Constants.MY_COOKIE];
}
}
};
});
}
public static class HttpHelper
{
private static IHttpContextAccessor accessor;
public static void Configure(IHttpContextAccessor httpContextAccessor)
{
accessor = httpContextAccessor;
}
public static HttpContext HttpContext => accessor.HttpContext;
}
HttpContext доступен для параметра, поэтому вспомогательный класс не нужен.
options.Events = new OpenIdConnectEvents
{
OnTicketReceived = async e =>
{
if (e.Principal.Identity.IsAuthenticated)
{
string myCookie = e.HttpContext.Request.Cookies[Constants.MY_COOKIE];
}
}
};
Вы также можете получить доступ к другим службам через параметр через var service = e.HttpContext.RequestServices.GetRequiredService<IWhateverService>();
Заголовки запросов проверяли? Кажется немного странным, что его не хватает: /
Насколько я понимаю, вход в систему происходит после запуска события OnTicketReceived
(источник). Файл cookie является нулевым, потому что он еще не был создан.
Вы правы, что вспомогательный класс здесь не нужен. Но результат остается прежним. myCookie также остается нулевым с вашим кодом. Я проверил, что cookie действительно записывается до входа в систему, и, похоже, это так.