[英]How to set cookies in asp.net core during authenticaiton/authorization
我正在尝试在 asp.net 核心 3.1 中的 cookie 和 openIdConnect 身份验证/授权期间设置自定义 cookies 但没有任何成功。 我希望有人能指出我正确的方向。 这是我的中间件设置:
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
是我的自定义 cookies 我希望浏览器在身份验证工作流程结束时拥有。 相反,我只看到.AspnetCore.CookiesC1 和.AspnetCore.CookiesC2。 我猜 cookie 身份验证中间件不知道我在 AddCookie() 或 AddopenIdConnect() 事件之一中设置的自定义 cookie。 但是,我可以将这些 cookies 设置在带有context.Response.Cookies.Append(...)
的自定义中间件中以显示在浏览器中,但我无法访问 Z1D1FADBD9150349C135781140FFFEE9D,所以宁愿在身份验证中处理它管道。 有什么想法或建议吗? 谢谢
我发现了问题,它与 Cookie 或 OpenIdConnect 中间件无关。 Secure=true
cookie 选项阻止浏览器创建 cookie。
我正在使用 VueJs asp.net 核心 SPA 模板。 Asp.net 核心将所有对 SPA 的调用代理到 Vuejs webpack 开发服务器。 开发服务器在http
上托管 SPA,这不是安全连接,但我将 cookie 配置为仅与 https ( Secure=true
) 一起使用。 因此,我没有在浏览器中看到 cookie。
现在我正在尝试将 webpack 服务器配置为使用自签名证书,因此 asp.net 核心不会抱怨它无法设置 ZF9D5C16A7F42203F8C195432354A3271 验证连接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.