c# – 如何在负载均衡器后面配置UseCookieAuthentication
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 如何在负载均衡器后面配置UseCookieAuthentication,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1729字,纯文字阅读大概需要3分钟。
内容图文
我正在配置.netcore应用程序以使用OIDC身份验证(由IdentityServer提供).
我在我的StartUp中包含了以下代码
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationScheme = "Cookies",
AutomaticAuthenticate = true,
ExpireTimeSpan = TimeSpan.FromMinutes(60)
});
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
{
AuthenticationScheme = "oidc",
SignInScheme = "Cookies",
Authority = "https://myauthority",
ClientId = "myclient",
CallbackPath = "/",
ResponseType = "id_token token",
Scope = { "openid", "profile", "email" },
});
该应用程序托管在AWS上,在ECS中运行的docker中.它运行在监听https的应用程序负载均衡器后面.
我发现因为我的应用程序本身不使用https(因为https由负载均衡器终止),OIDC中间件在重定向到OIDC服务器时生成错误的返回URL – 它生成的URL从http://开始.
返回URL由AuthenticationHandler基类中名为BuildRedirectUri的方法生成.它只是使用它收到请求的协议 – 似乎没有办法覆盖它.
protected string BuildRedirectUri(string targetPath)
{
return this.Request.Scheme + "://" + this.Request.Host + this.OriginalPathBase + targetPath;
}
因此,鉴于似乎不可能配置中间件来强制HTTP重定向,我还有其他选择吗?
我应该编写一个“更高”的中间件组件来监听重定向请求并修改协议吗?或者有更好的方法来解决这个问题吗?
解决方法:
使用代理时(例如将IIS放在Kestrel前面或在您的情况下,将负载平衡器放在其中),代理应该发送X-Forwarded-For和X-Forwarded-Proto HTTP标头.后者是通过请求的原始协议传递的.幸运的是有一个解决方案,那就是使用Microsoft.AspNetCore.HttpOverrides软件包中的ForwardedHeaders中间件.所以添加该包,然后将此代码添加到中间件管道:
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});
尽早将其置于您的管道中.
内容总结
以上是互联网集市为您收集整理的c# – 如何在负载均衡器后面配置UseCookieAuthentication全部内容,希望文章能够帮你解决c# – 如何在负载均衡器后面配置UseCookieAuthentication所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。