Я пытаюсь установить собственные файлы cookie во время аутентификации / авторизации cookie и openIdConnect в asp.net core 3.1, но безуспешно. Я надеюсь, что кто-то может указать мне правильное направление. Вот моя установка промежуточного программного обеспечения:
services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddCookie(option => {
option.Events = new CookieAuthenticationEvents {
//Tried the OnSignedIn() to set the custom cookie but no avail
}
})
.AddOpenIdConnect("Is4", options =>
{
options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.Authority = "identityserver4.url";
options.RequireHttpsMetadata = false;
options.ClientId = "ClientId";
options.ClientSecret = "ClientSecret";
options.ResponseType = OpenIdConnectResponseType.Code;
options.UsePkce = true;
options.ResponseMode = "form_post";
options.CallbackPath = "/signin-oidc";
options.GetClaimsFromUserInfoEndpoint = true;
options.Scope.Add("openid");
options.Scope.Add("profile");
options.Scope.Add("offline_access");
options.Scope.Add("customer-api");
options.SaveTokens = true;
options.Events = new OpenIdConnectEvents
{
OnUserInformationReceived = (context) =>
{
var accessTokenSplit = context.ProtocolMessage.AccessToken.Split(".");
context.Response.Cookies.Append(
key: "HeaderPayload",
value: $"{accessTokenSplit[0]}.{accessTokenSplit[1]}",
options: new CookieOptions
{
Domain = "localhost:5001",
SameSite = SameSiteMode.Strict,
Expires = DateTimeOffset.UtcNow.AddMinutes(30),
Secure = true,
HttpOnly = false
}
);
context.Response.Cookies.Append(
key: "Signature",
value: $"{accessTokenSplit[2]}",
options: new CookieOptions
{
Domain = "localhost:5001",
SameSite = SameSiteMode.Strict,
Expires = DateTimeOffset.UtcNow.AddMinutes(30),
Secure = true,
HttpOnly = true
}
);
return Task.CompletedTask;
}
});
HeaderPayload
и Signature
- это мои пользовательские файлы cookie, которые я хочу, чтобы браузер имел в конце рабочего процесса аутентификации. Вместо этого я вижу только .AspnetCore.CookiesC1 и .AspnetCore.CookiesC2. Я предполагаю, что промежуточное программное обеспечение проверки подлинности файлов cookie не знает о моем настраиваемом файле cookie, который я установил в одном из событий AddCookie () или AddopenIdConnect (). Однако я могу установить эти файлы cookie в настраиваемом промежуточном программном обеспечении с context.Response.Cookies.Append(...)
, чтобы они отображались в браузере, но у меня не будет доступа к токену доступа JWT, поэтому я предпочитаю обрабатывать его в конвейере аутентификации. Есть мысли или предложения? Спасибо