我开始开发一个RESTful API(带有WCF),它将用于2Way SSL身份验证 - 客户端认证和服务器端认证。
据我了解,不需要密码/用户名,因为客户端已经通过客户端证书进行了身份验证。
我的问题是,某些公开的方法应仅限于特定的客户端。
所以,我还需要某种形式的授权。我想过使用一个秘密密钥,它将被提供给授权特定功能的客户端,但后来我意识到这个客户端已经有了可能用于授权的客户端证书。
有没有办法以编程方式获取当前使用的客户端证书的名称,然后通过证书名称进行授权?
有点像这样:string clientCertificate = CertificateAuthority.GetCurrentCertificate;
if (Authorize(clientCertificate))
doSomething()
答案 0 :(得分:1)
是的,有这样的方法,最值得注意的是X509Certificate2.GetNameInfo Method (顺便说一下,Dominick Baier有一个很好的fluent API extension)
但是,我认为你应该看一下Claims-Based Identity,这将为你提供一个简化的代码架构。
答案 1 :(得分:0)
证书持有者的身份在证书的SubjectDN中。
其余部分,即授权部分,取决于应用程序,也因您的体系结构而异。例如,如果您使用的是LDAP,则会查找该用户的角色。