C# 具有客户端证书身份验证的信号器

C# 具有客户端证书身份验证的信号器,c#,asp.net,signalr,client-certificates,C#,Asp.net,Signalr,Client Certificates,我在IIS上托管了一个服务,它使用信号器与客户端建立持久连接 我正在尝试实现客户端证书身份验证,以便服务器可以根据客户端发送的证书验证客户端是否有效。我正在使用信号器的PersistentConnection 客户: 我创建了一个连接对象,并创建了一个X.509证书,通过以下方式将其添加到连接中: var connection = new Connection("localhost:8060/TheService/connect"); connection.AddClientCertificat

我在IIS上托管了一个服务,它使用信号器与客户端建立持久连接

我正在尝试实现客户端证书身份验证,以便服务器可以根据客户端发送的证书验证客户端是否有效。我正在使用信号器的PersistentConnection

客户: 我创建了一个连接对象,并创建了一个X.509证书,通过以下方式将其添加到连接中:

var connection = new Connection("localhost:8060/TheService/connect");
connection.AddClientCertificate(certificate); 
connection.Start().Wait();
当客户端尝试连接时,我想验证它提供的证书是否有效。因此,在服务器端,我覆盖Signal的PersistentConnection中的AuthorizeRequest()方法:

    public class MyConnection : PersistentConnection
    {
        protected override Task OnReceived(IRequest request, string connectionId, string data)
        {
            return Connection.Broadcast("Server Received: " + data);
        }

        protected override bool AuthorizeRequest(IRequest request)
        {
            INameValueCollection headers = request.Headers;

            foreach (KeyValuePair<string, string> entry in headers)
            {
                Console.WriteLine("Key: {0}, Value: {1}", entry.Key, entry.Value);
                Console.WriteLine("");
            }

            return true; 
        }
}
公共类MyConnection:PersistentConnection
{
已收到受保护的覆盖任务(IRequest请求、字符串连接ID、字符串数据)
{
返回连接。广播(“服务器接收:”+数据);
}
受保护的覆盖bool授权请求(IRequest请求)
{
INameValueCollection headers=request.headers;
foreach(标头中的KeyValuePair条目)
{
WriteLine(“Key:{0},Value:{1}”,entry.Key,entry.Value);
控制台。写线(“”);
}
返回true;
}
}
我的问题是:如何在AuthorizeRequest方法中检索客户端证书?我需要signer以某种方式获得对证书的访问权,以便我可以验证它是否符合请求,然后返回false(坏证书)或true(有效证书)


谢谢

您应该能够从作为参数获取的请求中获取证书。
HttpClientCertificate cert=request.GetHttpContext().request.ClientCertificate