带有客户端证书认证的SignalR

本文关键字:SignalR 认证 证书 客户端 | 更新日期: 2023-09-27 18:16:43

我有一个托管在IIS上的服务,它使用SignalR与客户端建立持久连接。

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

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

var connection = new Connection("localhost:8060/TheService/connect");
connection.AddClientCertificate(certificate); 
connection.Start().Wait();

当客户端尝试连接时,我想验证它提供的证书是否有效。所以在服务器端,我在SignalR的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; 
        }
}

我的问题是:如何在AuthorizeRequest方法中检索客户端证书?我需要SignalR以某种方式获得对证书的访问权限,以便我可以验证它AuthorizeRequest,然后返回false(坏证书)或返回true(有效证书)。

谢谢!

带有客户端证书认证的SignalR

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