【问题标题】:ASP.NET Core Identity not saving cookie in browserASP.NET Core Identity 未在浏览器中保存 cookie
【发布时间】: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


【解决方案1】:

好的,经过数小时的故障排除后,我终于找到了错误。链接出错...不是在调用 URL,是在调用方法:(

<a href="@_manager.LogOut()" class="menu-link px-5">@_localizer["SIGN_OUT"]</a>

应该是:

<a href="@Url.Action("LogOut", "Account")" class="menu-link px-5">@_localizer["SIGN_OUT"]</a>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    • 2018-05-19
    • 2019-11-04
    • 1970-01-01
    • 2013-11-02
    • 2018-11-19
    • 2021-02-28
    相关资源
    最近更新 更多