Redirect 如何将IdentityServer4客户端配置为反向代理后的生产,以解决;关联失败。“未知位置”;错误

Redirect 如何将IdentityServer4客户端配置为反向代理后的生产,以解决;关联失败。“未知位置”;错误,redirect,reverse-proxy,identityserver4,correlation,production-environment,Redirect,Reverse Proxy,Identityserver4,Correlation,Production Environment,IdentityServer4客户端通过IIS反向代理服务器获取“异常:关联失败。未知位置” 我们有一个.NET核心MVC应用程序,它通过Identity server 4应用程序进行身份验证。这很有效 但是,我们需要将其部署到一个环境中,在这个环境中,必须通过反向代理服务器访问应用程序服务器和标识服务器 在客户端中,我们将Authority选项的OIDC主机更改为Identity server的反向代理服务器 在Identity server中,我们将此客户端重定向Uri的主机更改为指向客户端

IdentityServer4客户端通过IIS反向代理服务器获取“异常:关联失败。未知位置”

我们有一个.NET核心MVC应用程序,它通过Identity server 4应用程序进行身份验证。这很有效

但是,我们需要将其部署到一个环境中,在这个环境中,必须通过反向代理服务器访问应用程序服务器和标识服务器

在客户端中,我们将Authority选项的OIDC主机更改为Identity server的反向代理服务器

在Identity server中,我们将此客户端重定向Uri的主机更改为指向客户端的反向代理

我们已将客户端配置为使用客户端反向代理服务器的主机名传递重定向Uri

使用此配置,当未经授权的用户访问客户端时,用户将被重定向到Identity server上登录

登录成功,但用户返回客户端应用程序时出现以下错误:“异常:关联失败。未知位置”

但是,该使用已成功通过身份验证,并且可以访问客户端应用程序

.AddOpenIdConnect("oidc", options =>
               {
                   options.SignInScheme = "Cookies";

                   options.Authority = Configuration.GetSection("Uris").GetSection("IdentityServer").Value;
                   options.RequireHttpsMetadata = false;
                   options.ClientId = "mvc";
                   options.ClientSecret = "secret";
                   options.ResponseType = "code id_token";
                   options.SaveTokens = true;
                   options.Scope.Add("api1");
                   options.Scope.Add("openid");
                   options.Scope.Add("profile");
                   options.Scope.Add("offline_access");
                   options.ClaimActions.MapJsonKey("website", "website");
                  options.Events.OnRedirectToIdentityProvider = async n =>
                   {
                       n.ProtocolMessage.RedirectUri =  Configuration.GetSection("Uris").GetSection("RedirectUri").Value;
                       await Task.FromResult(0);

                   };
浏览器中返回错误:

处理请求时发生未处理的异常

异常:关联失败

未知位置

异常:处理远程登录时遇到错误

Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler+d_u12.MoveNext()

错误记录信息:

应用程序已启动。按Ctrl+C组合键关闭

警告:Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler[15] 未找到“.AspNetCore.Correlation.oidc.pz2cS4-ghvvsghghhojqqtwa8dl_CDKjEBAGqA4Sg-RY”cookie

失败:Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[0] 执行请求时发生未处理的异常 System.Exception:处理远程登录时遇到错误。-->系统异常:关联失败。 ---内部异常堆栈跟踪的结束---

在Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler`1.d_u12.MoveNext()中 ---来自引发异常的上一个位置的堆栈结束跟踪--- 在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()中 在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中 在IdentityServer4.Hosting.FederatedSignOut.AuthenticationRequestHandlerWrapper.d_u6.MoveNext()处 ---来自引发异常的上一个位置的堆栈结束跟踪--- 在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()中 在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中 在Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.d_u6.MoveNext()中 ---来自引发异常的上一个位置的堆栈结束跟踪--- 在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()中 在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
在Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.d_u7.MoveNext()

中,当调用“.AddOpenIdConnect”时,OpenIdConnectHandler将通过ASP.NET Core的依赖项注入系统注册,并将使用在lambda中配置的选项进行调用

这继承自的,它是方法和关联ID所在的位置。关联id是一个随机字符串,设置为cookie的名称,并在浏览器上进行设置和验证,以确保您使用的是启动登录的同一用户代理

当相关cookie已设置但未收到时,将显示。此失败的请求最终由处理(RemoteAuthenticationHandler知道事件,因为OpenIdConnectOptions实际上是RemoteAuthenticationOptions的派生类)

要更优雅地处理此身份验证失败,您可以在OpenIdConnectOptions中找到识别此失败的方法,并可能显示会话过期页面,或者找到自动重新身份验证的方法


TLDR:ASP.NET Core设置了一个有效期很短的相关cookie,如果重定向到登录和代码交换之间的时间过长,该cookie将无法通过身份验证。要优雅地处理它,您可以在选项的事件属性上设置“RemoteFailure”。

当调用“.AddOpenIdConnect”时,OpenIdConnectHandler将通过ASP.NET Core的依赖项注入系统注册,并将使用您在lambda中配置的选项进行调用

这继承自的,它是方法和关联ID所在的位置。关联id是一个随机字符串,设置为cookie的名称,并在浏览器上进行设置和验证,以确保您使用的是启动登录的同一用户代理

当相关cookie已设置但未收到时,将显示。此失败的请求最终由处理(RemoteAuthenticationHandler知道事件,因为OpenIdConnectOptions实际上是RemoteAuthenticationOptions的派生类)

要更优雅地处理此身份验证失败,您可以在OpenIdConnectOptions中找到识别此失败的方法,并可能显示会话过期页面,或者找到自动重新身份验证的方法

TLDR:ASP.NET Core设置了一个有效期很短的相关cookie,如果重定向到登录和代码交换之间的时间过长,该cookie将无法通过身份验证。要优雅地处理它,您可以在选项的事件属性上设置“RemoteFailure”。

我知道“correlation failed”来自何处(),但您知道吗