将 Microsoft.Identity.Web 与 IdentityServer4 一起使用时如何修复“关联失败”异常?

问题描述 投票:0回答:1

尝试使用 Microsoft.Identity.Web 解决方案在 Asp.net Core 应用程序中建立外部提供商连接。

我已使用下一个 C# 代码连接它:

services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme).AddMicrosoftIdentityWebApp(Configuration.GetSection("AzureAd"));

它可以作为外部提供商集成。

但是,当我使用当前提供商登录时,出现异常

System.Exception:“处理远程登录时遇到错误。” 内部异常。 异常:关联失败。

当我研究时,我发现这是“关联cookie”问题(意味着提供商不会找到与“关联”的cookie)。据我检查,

Request.Cookie.Count == 0

但是浏览器发送 .AspNetCore.Correlation 和 .AspNetCore.OpenIdConnect.Nonce cookie,其值为“N”。

应用程序的cookie配置设置是:

        services.ConfigureApplicationCookie(config =>
        {
            config.Cookie.SameSite = SameSiteMode.Strict;

           
        });
        services.ConfigureExternalCookie(options =>
        {
            options.Cookie.Name = "Identity.Application";
            options.Cookie.SameSite = SameSiteMode.Strict;
        });

...

        app.UseCookiePolicy(new CookiePolicyOptions()
        {
            MinimumSameSitePolicy = Microsoft.AspNetCore.Http.SameSiteMode.Lax,
            HttpOnly = HttpOnlyPolicy.None
        });

设置有什么问题?可能有什么问题,或者缺席?

UPD:由于 IdentityServer4 使用和定制而添加了 Cookie 设置。据我发现,Microsoft.Identity.Web 添加了自己的 cookie 方案,而不是使用默认方案。因此,关联Cookie不会通过,导致使用不同的cookie方案(Request.Cookies.Length = 0)。因此,这些仍然存在冲突。尽管如此,这个问题应该保持开放状态,可能会有一些更新来解决这个问题,或者我的结论是错误的。

c# asp.net-core identityserver4 openid microsoft.identity.web
1个回答
0
投票

我可以重现您的问题。

enter image description here

只要评论这一行

MinimumSameSitePolicy = Microsoft.AspNetCore.Http.SameSiteMode.Lax,
,那么这个问题就会消失。

以我的愚见,我们不需要设置cookie策略。您可以查看Azure AD示例,没有设置cookie策略。 只需要

builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme).AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAd"));

© www.soinside.com 2019 - 2024. All rights reserved.