- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在努力让我的 .net core 1.1 应用程序在负载均衡器后面工作并强制执行 https。我的 Startup.cs 中有以下设置
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IServiceProvider serviceProvider, IOptions<Auth0Settings> auth0Settings)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
var startupLogger = loggerFactory.CreateLogger<Startup>();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
app.UseBrowserLink();
startupLogger.LogInformation("In Development");
}
else
{
startupLogger.LogInformation("NOT in development");
app.UseExceptionHandler("/Home/Error");
}
app.UseMiddleware<HttpsRedirectMiddleware>();
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});`
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationScheme= CookieAuthenticationDefaults.AuthenticationScheme,
AutomaticAuthenticate = true,
AutomaticChallenge = true,
CookieHttpOnly = true,
SlidingExpiration = true
});
HttpsRedirectMiddleware 用于验证 LB 是否设置了 X-Forwarded-Proto,它确实设置了,并且以 https 作为唯一值返回。当我访问网站 (https://myapp.somedomain.net) 时,它知道我没有通过身份验证并将我重定向到 (http://myapp.somedomain.net/Account/Logon?ReturnUrl=%2f)。它失去了 SSL 连接并切换回我的端口 80。 .net 核心文档说要像下面这样使用“UseForwardedHeaders”,这在我的情况下不起作用。发生此切换时,控制台记录器没有来自中间件的任何错误或警告。
为了短期修复,我将其放在“UseForwardedHeaders”下方
app.Use(async (context, next) =>
{
var xproto = context.Request.Headers["X-Forwarded-Proto"].ToString();
if (xproto!=null && xproto.StartsWith("https", StringComparison.OrdinalIgnoreCase)){
startupLogger.LogInformation("Switched to https");
context.Request.Scheme = "https";
}
await next();
});
上面的工作很完美,但是是一个 hack。我想以正确的方式去做。
最佳答案
.NET Core 有一个用于转发 header 的默认设置。对于 IIS 集成,它默认为 127.0.0.1。
追踪源代码后,我发现您可以清除KnownNetworks
和KnownProxies
列表以接受任何转发的请求。但是,最好仍然设置防火墙或将已知网络锁定到私有(private)子网。
var forwardingOptions = new ForwardedHeadersOptions()
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
};
forwardingOptions.KnownNetworks.Clear(); // Loopback by default, this should be temporary
forwardingOptions.KnownProxies.Clear(); // Update to include
app.UseForwardedHeaders(forwardingOptions);
.NET Core 2.x 的
更新:记住在调试问题后设置代理/负载均衡器或专用网络的 IP。这可以防止绕过您的代理/负载平衡器并伪造 Forwarded-For
header 。
services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardLimit = 2;
// Replace with IP of your proxy/load balancer
options.KnownProxies.Add(IPAddress.Parse("192.168.1.5"));
// 192.168.1.0/24 allows any from 192.168.1.1-254;
options.KnownNetworks.Add(new IPNetwork(IPAddress.Parse("192.168.1.0"), 24));
});
关于c# - .net Core X Forwarded Proto 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43749236/
专家: 我有两个 .proto 文件(如下所示),第二个依赖于第一个。 ImageMessage.proto: package dvr; message ImageMessage { re
我按照找到的例子 here .但是每当我输入命令“C:/Program Files/protoc/bin/protoc”object_detection/protos/.proto --python_
我有一个名为 myProtos 的库,它看起来像这样 . |-- proto |---- hello.proto | |-- generated └---- hello.pb.go 我在外部有一个名为
我想知道如何正确引用外部原型(prototype)文件。假设我有一个引用标准 protobuf 类型的 .proto 文件,例如 Timestamp : syntax = "proto3"; pack
我是 Google Protobuf 新手。我想解决一个问题,但在互联网上找不到答案,也许我问错了问题.. 我想构建一个使用 .proto 模式(和生成的类)的工具,并将输入字符串从可读字符串转换为
我有这个问题: grpc_tools._protoc_compiler.ProtocErrors: google/protobuf/timestamp.proto:-1:0 error: File n
软件环境:Win10,Goland。 去版本:go1.9.1 windows/amd64.协议(protocol)——版本:libprotoc 3.5.1当我执行命令时。结果如下 protoc -I
我正在使用 Android Studio 来处理 tomahawk-android项目,所以我使用 git 将该项目直接克隆到 Android Studio 中,但无法构建,并显示; Could no
一 点睛 可以在 proto 中定义多个类,然后从中选择任意一个类,可以在 proto 中定义多个 message,然后再将多个 message 以枚举的形式供使用时选择。 二 实战 1 proto
我在不同的 go 包下编译了 2 个 proto,但是当我在服务器中注册它们并运行它时,我得到: panic: proto: file "common.proto" is already regist
perl6 如何决定哪个 proto token先匹配? 下面的代码按预期工作,它匹配字符串 1234 , 和 Grammar::Tracer显示匹配的第一个标记是 s:sym ,这是有道理的,因为它
我有 2 个 grpc 服务( service1 和 service2 ),它们相互交互,在某些情况下,service1 的 rpc 响应will 由 service2 中定义的结构组成,在经历了不可
我有一个 MyResponse.proto 文件,它导入两个 .proto 文件 Alternative.proto 和 Index.proto >. MyResponse.proto 文件: imp
我有一个非常简单的 android 应用程序,它使用 protobuf 从服务器获取数据,然后让用户浏览数据树(简化) 现在我只想在我的结构中使用这些数据,所以我使用 protobuf 回复(通过自动
我有两个服务:Story 和 Tag。这些文件的结构如下: Story |-- StoryService | `-- proto | `-- storyservice.proto `-
对于 CPP 编程,我在 .proto 文件中定义了一个 enum,我必须在另一个 .proto 文件中使用相同的枚举。 //first.proto package A; enum foo {
如果 protobuf 消息中的属性是第一个成员或第二个成员,有什么区别? 我拥有的 Request proto 消息有 2 个字段。我被要求交换属性的位置 message SomeRequest {
我正在使用 protobuf-net 的 ProtoBufTool 自定义工具从 .proto 文件生成 C# 类。到目前为止,我一直无法让原型(prototype)文件中的 import 语句使用相
我正在从事 AI 项目,但我在 Python 方面仍然不是很有经验。 我正在尝试 build and test this project . 我遵循了所有说明,但是当我尝试启动 python 脚本时仍
我有一个名为 Game 的对象,它具有名称、编号、团队等属性。它的许多属性本身就是对象:团队是团队对象的列表。例如,所有这些对象都具有使用 proto 定义的函数(不确定实际术语) Game.prot
我是一名优秀的程序员,十分优秀!