我们一直在 .NET Core 2.2 应用程序中利用 Cookie 身份验证,并在通过 Microsoft 外部第 3 方提供商验证用户身份后登录用户。就在最近,我们观察到此工作流中的一个错误,其中指出:Microsoft.AspNetCore.Authentication.MicrosoftAccount.MicrosoftAccountHandler:信息:来自 RemoteAuthentication 的错误:关联失败..”我们已将其缩小到这样一种情况,即如果用户已经登录到他们的 Microsoft 帐户(只有一个帐户登录/活动)......并且如果他们随后登录到我们的网站,他们将自动登录而无需选择他们的帐户名称或任何其他交互。更重要的是,如果用户确实点击了他们的账户名,这会触发另一个登录请求,我相信这会导致“关联失败..”错误,因为请求/响应 cookie 存在冲突。我能够从 localhost 重现该问题,尽管我们实际的托管服务提供商在 Azure(应用服务)中。我已经探索了以下 Microsoft 文档中提到的一些解决方案/方法,其中提到了负载平衡器和代理服务器(转发标头)的配置......以及在 ASP.NET Core 中强制执行 HTTPS:https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/proxy-load-balancer?view=aspnetcore-2.1https://learn.microsoft.com/en-us/aspnet/core/security/enforcing-ssl?view=aspnetcore-2.1&tabs=visual-studio这些似乎没有解决问题的根源,据我所知,这是在向 Microsoft 提供商提出安全挑战时自动登录/选择用户帐户。这是我们的 Startup.cs 服务配置中的一个片段,用于第 3 方身份验证配置。 // Authentication is added via Cookie services.ConfigureApplicationCookie(options => options.LoginPath = "/Login"); services.AddAuthentication(opts => { opts.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme; opts.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme; }) .AddCookie(opts => { opts.Cookie.SecurePolicy = CookieSecurePolicy.Always; opts.LoginPath = "/auth/login"; opts.LogoutPath = "/auth/logout"; opts.ClaimsIssuer = "<ISSUER_HERE>"; // *** redacted for privacy }) });理想情况下,“自动登录”行为会被阻止,因此用户必须从 Microsoft 帐户选择提示中选择他们的帐户(即使他们之前已经登录过)。现在,我们将用户重定向到一个错误页面,我们可以在其中清除所有 cookie 并让用户重新尝试登录。如果他们在登录过程中不断选择他们的用户帐户并且两个请求相互冲突,这就会造成问题。任何见解将不胜感激!
1 回答
HUH函数
TA贡献1836条经验 获得超4个赞
好吧,我明白了。
这似乎有点 hacky,但是,嘿,它有效。
.AddMicrosoftAccount(options =>
{
// Your configuration here
options.Events.OnRedirectToAuthorizationEndpoint = context =>
{
context.HttpContext.Response.Redirect(context.RedirectUri + "&prompt=select_account");
return Task.FromResult(0);
};
})
- 1 回答
- 0 关注
- 204 浏览
添加回答
举报
0/150
提交
取消
