Service Fabric Stateless api 基于认证的身份验证

Service Fabric Stateless api certification based authentication

我被要求使用基于证书的身份验证来保护我的无状态 api 端点。我阅读了有关该主题的内容,并意识到我需要创建一个中间件来检查请求,然后检查 x-ARR-ClientCert header,以根据一些指纹检查证书是否有效。到目前为止,一切都很好。

问题是我无法测试中间件,因为我不知道如何发送这样的 header。我已经有一个自签名证书 (.crt) 和一个密钥 (.key)。我尝试使用邮递员,但在 VS2017 上调试时看不到正在发送的 x-ARR-ClientCert。

有帮助吗?

编辑 1

我正在学习本教程:https://blogs.msdn.microsoft.com/kaevans/2016/04/13/azure-web-app-client-certificate-authentication-with-asp-net-core-2/

我知道它有点老了,但最后作者显示浏览器要求证书,但我无法管理浏览器要求证书。

有一件事我在这里忘了说,我的 API 在本地 Service Fabric 集群上,所以这可能就是问题所在

编辑 2

对于 Postman,我遵循了这个教程:Postman Tutorial,但没有成功:首先我不得不关闭 ssl 检查,然后在将证书添加到 Postman 时,x-ARR-ClientCert header 未发送。

我也试过 curl: > curl --cert cert.crt --key client.key https://localhost/api/values --insecure 但仍然没有发送 x-ARR-ClientCert。

我不确定你想要完成什么...

在相互证书身份验证中,浏览器处理 authentication\certificate 交换,当用户尝试访问受客户端证书保护的端点时,服务器会告诉客户端(浏览器)它需要证书才能访问接受连接,浏览器会向用户弹出一条消息,要求使用证书,写得很好 here.

如果打算实现自动化,邮递员博客有一个 article on how you setup client certificates for this scenario. The other option is trying to send the certificate using CURL as described here

其次,您正在重新发明轮子,在 kestrel 中已经有一些现成的使用实现 HttpsConnectionAdapterOptions.ClientCertificateMode = RequireCertificate and some authorization middlewares here and here

最后,确保中间没有代理,或者代理或网关没有从客户端连接中删除证书。