小编Pau*_* W.的帖子

仅对特定路由或控制器要求SSL客户端证书

我有一个使用Kestrel作为服务器的ASP.NET MVC Core项目.它既提供用户内容(asp.net mvc),又提供代理(软件)与之通信的主机Web API控制器.我已启用HTTPS和客户端证书支持.问题是我想要为调用Web API的代理(软件)要求客户端证书,但我不想要为常规基于浏览器的用户要求/提示客户端证书.

我通过以下方式启用了HTTPS /客户端证书支持:

var host = new WebHostBuilder()
.UseKestrel(options =>
{
    HttpsConnectionFilterOptions httpsoptions = new    HttpsConnectionFilterOptions();
    httpsoptions.ServerCertificate = CertUtil.GetServerCert();
    httpsoptions.ClientCertificateMode = ClientCertificateMode.AllowCertificate;
    httpsoptions.CheckCertificateRevocation = false;

    options.UseHttps(httpsoptions);
})
.UseUrls("http://0.0.0.0:5000", "https://0.0.0.0:5001")
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.Build();
host.Run();
Run Code Online (Sandbox Code Playgroud)

我在Startup.cs中设置了一个单独的中间件处理程序来处理客户端证书的自定义验证.这段代码确实成功执行,在这个意义上一切正常.

问题是全局发生这种情况,我只想将客户端证书应用于特定的控制器和/或路由; 或者我真的会采取任何粒度.

通过创建两个虚拟目录,然后将SSL设置设置为接受,另一个设置为Ignore,本质上尝试创建可以在IIS中获得的相同类型的行为.带有Accept的那个将提示浏览器提供证书,而忽略的那个则不会.

我尝试将HttpsConnectionFilterOptions设置为仅指定ServerCertificate,希望不设置任何客户端证书相关选项将允许服务器在发送时接收客户端证书,否则不会提示浏览器.这似乎不起作用,因为我的中间件客户端证书处理程序在调用此函数时从未看到客户端证书(当ClientCertificateMode设置为AllowCertificate时它会这样做.

context.Connection.GetClientCertificateAsync();
Run Code Online (Sandbox Code Playgroud)

我想简而言之,Kestrel托管甚至允许更细粒度的客户端证书映射/处理,还是只能使用IIS?IIS不是此项目的选项,我宁愿不必为客户端cert api方面创建单独的项目/进程.感谢任何帮助!

c# asp.net-core-mvc kestrel-http-server asp.net-core

10
推荐指数
1
解决办法
1万
查看次数

如何从在 Kestrel asp.net core 上执行 ClientCertificateValidation 的函数中获取 HttpContext?

I have an asp.net core self hosted application within Kestrel. Part of the .UseKestrel options within my Program.cs Main() function is to use the ClientCertificateValidation() functionality to have my own function validate client certificates.

This validation functionality is working fine but my custom validation function needs to be able to add an identity role to the connection that has been validated. I know normally you could just use dependency injection to get HttpContext but since this is a function pointed …

kestrel-http-server asp.net-core

6
推荐指数
1
解决办法
511
查看次数

C#Mongodb多个对象数组文档的笛卡尔积

尝试用C#/ Linq或甚至原始Mongodb查询本身如何将多个数组作为笛卡尔积加入.

比方说,我有一个集合,我过滤到以下两个文件:

[
{"movie":"starwars","showday":"monday"},
{"movie":"batman","showday":"thursday"},
{"movie":"sleepless","showday":"tuesday"}
]

[
{"actor":"angelina","location":"new york"},
{"actor":"jamie","location":"california"},
{"actor":"mcavoy","location":"arizona"}
]
Run Code Online (Sandbox Code Playgroud)

如何连接每个数组中的每个项目以生成以下类型的结果?

[{"movie":"starwars","showday":"monday","actor":"angelina","location":"new york"},
{"movie":"batman","showday":"thursday","actor":"angelina","location":"new york"},
{"movie":"sleepless","showday":"tuesday","actor":"angelina","location":"new york"},
{"movie":"starwars","showday":"monday","actor":"jamie","location":"california"},
{"movie":"batman","showday":"thursday","actor":"jamie","location":"california"},
{"movie":"sleepless","showday":"tuesday","actor":"jamie","location":"california"},
{"movie":"starwars","showday":"monday","actor":"mcavoy","location":"arizona"},
{"movie":"batman","showday":"thursday","actor":"mcavoy","location":"arizona"},
{"movie":"sleepless","showday":"tuesday","actor":"mcavoy","location":"arizona"}]
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个可以处理任意数量文档的解决方案.因此,例如,如果在此示例中有第3个文档,其中还有3个对象数组,它们将在数组中生成27个项目的结果集 - 或者原样为27行.

希望有一个如何使用C#(Linq?)Mongodb驱动程序来查询和返回这样的数据的解决方案,但是对于mongodb特定的查询也是开放的,因为我希望能从那里反转逻辑.谢谢

c# linq arrays mongodb

6
推荐指数
1
解决办法
580
查看次数

C#合并父级别对象列表中的子对象列表

如果您有一个List并且想要为具有相同Id字段的任何SomeObject合并子List,您将如何做到这一点?以下是示例对象:

public class SomeObject
{
    public string Name { get; set; }
    public int Id { get; set; }
    public List<KeyPair> ValuePairs {get;set;} 
}

public class KeyPair
{
    public string Key { get; set; }
    public string Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这是模拟列表的示例创建:

List<SomeObject> objects = new List<SomeObject>();
        objects = new List<SomeObject>()
        {
            new SomeObject
            {
                Name="Rando Object 1",
                Id=5,
                ValuePairs=new List<KeyPair>()
                {
                    new KeyPair
                    {
                        Key="TestKey1",
                        Value="TestValue1"
                    },
                    new KeyPair
                    {
                        Key="TestKey2",
                        Value="TestValue2"
                    }
                }
            },
            new SomeObject …
Run Code Online (Sandbox Code Playgroud)

c# linq linq-to-objects

5
推荐指数
1
解决办法
1691
查看次数