我在一个负载均衡器后面托管一个ASP.NET Core2.xWeb应用程序。比方说,公共网址是public_url.com。在内部,该应用程序在private_url.com/iis_sub_dir中。
我可以首先在管道中添加一个定制的BasePath中间件来完成这个设置。
问题:在使用OpenIdConnect中间件对外部提供者登录后,成功地用302响应代码返回到我的/signin-oidc回调路径,但是响应头“位置”类似于:public_url.com/iis_sub_dir/etc。那个iis_sub_dir毁了一切,我得到了404。
我试图添加另一个自定义中间件,但似乎没有将此请求/响应传递给它!
主配置:
.AddOpenIdConnect(options =>
{
options.Authority = xxx;
options.ClientId = xxx;
options.CallbackPath = "/signin-oidc";
options.CorrelationCookie.Path = "/"; // cookie + load balancer fix
options.NonceCookie.Path = "/"; // cookie + load balancer fix
options.ResponseType = "code";
options.Events = new OpenIdConnectEvents
{
OnRedirectToIdentityProvider = async (ctx) =>
{
ctx.ProtocolMessage.RedirectUri = publicPath + CallbackPath;
await Task.FromResult(0);
},PathBase中间件:
httpContext.Request.PathBase = new PathString(baseRedirectPath);我只想将iis_sub_dir从CallbackPath端点的"location“响应头中删除。
谢谢。
发布于 2021-01-22 09:45:39
在使用OpenId连接身份验证方案时,请使用RedirectUri属性。
await HttpContext.ChallengeAsync("OpenId-SchemeName",
new AuthenticationProperties() { RedirectUri = "http://public-url.com/iis_sub_dir/signin-oidc" });https://stackoverflow.com/questions/65820307
复制相似问题