【发布时间】:2022-01-10 21:11:19
【问题描述】:
我已经搜索了几个小时的解决方案......所以我们开始吧。 我有3个应用程序: 1: API - 这里我们有身份验证 2:管理员客户端 - 效果很好 2:用户客户端 - 能够登录并获得身份验证......但是在每次请求时,我都会再次获得登录屏幕,就像我没有通过身份验证一样(我在登录时获得了身份验证)。此应用程序不会将 cookie 保存到浏览器(管理员会)
Program.cs(即 .net6)中的客户端代码在 Admin 和 User 应用程序中是相同的。唯一的区别是 cookie 名称
var _authenticationSettings = _serviceProvider.GetService<IAuthenticationSettings>();
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddCookie(JwtBearerDefaults.AuthenticationScheme,
options => {
options.LoginPath = _authenticationSettings.LoginPath;
options.AccessDeniedPath = _authenticationSettings.AccessDeniedPath;
options.Events = new CookieAuthenticationEvents
{
// Check if JWT needs refreshment
OnValidatePrincipal = RefreshTokenMonitor.ValidateAsync
};
options.Cookie.Name = "MainAppCookie";
}
);
我在其他项目中使用过这种方法,它的工作原理应该是……唯一的区别是它是一个 .net5 IIS 项目……现在我在 Kestrel 上运行了 .net6
知道我在这里做错了什么......
cookie 被创建:
使用这个值(不知道在哪里可以找到 cookie 中的值..
即使我将 ExpireTimeSpan 设置为 60 分钟,cookie 的有效期也是 30 分钟
当我登录到 MainApp 客户端时,你有 cookie 状态。上面你可以看到 AdminApp cookie(之前在那里登录过)
在这里,您在登录时也有 AdminApp cookie 状态..
我必须承认……这真的很奇怪
【问题讨论】:
-
这一行看起来很奇怪 "builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)" ,应该是 CookieAuthenticationDefaults.AuthenticationScheme (在这种情况下没关系)
-
另外,您使用的是 HTTPS 吗?此外,用那个小代码回答你的问题有点困难。是客户端的代码吗?用户是如何登录的?
-
登录和身份验证工作...我能够登录并获取所有相关声明和其他用户特定信息。我在“Admin”客户端中使用相同的身份验证,它可以完美运行。如图所示,当我登录“Admin”应用程序时,我刚刚将“AdminCookie”添加到浏览器中。
-
当我登录到“客户端”应用程序(应该创建一个名为“MainAppCookie”的 cookie 时,我获得了身份验证,并且能够检索所有相关的用户详细信息(克莱姆等),但是cookie 没有保存到浏览器中......所以当我想移动到不同的视图时,我被重定向到 ligin。Tha“MainAppCookie”确实出现在浏览器的 cookie 列表中一毫秒,但没有得到保存(再次消失)...所以应用程序无法访问它
-
响应中的 set-cookie 语句是什么样的?也许过期设置为一些较短的时间间隔?
标签: c# .net asp.net-core jwt asp.net-identity