我正在尝试使用 OWIN 管道实现客户端证书身份验证,根据 Dominick Baier 在 2013 年底发表的博客 (http://leastprivilege.com/2013/11/11/client-certificate-authentication-middleware-for-katana/),您可以通过创建自定义身份验证处理程序来实现:
public class ClientCertificateAuthenticationHandler : AuthenticationHandler<ClientCertificateAuthenticationOptions>
{
protected override Task<AuthenticationTicket> AuthenticateCoreAsync()
{
var cert = Context.Get<X509Certificate2>("ssl.ClientCertificate");
if (cert == null)
{
return Task.FromResult<AuthenticationTicket>(null);
}
try
{
Options.Validator.Validate(cert);
}
catch
{
return Task.FromResult<AuthenticationTicket>(null);
}
var claims = GetClaimsFromCertificate(cert, cert.Issuer, Options.CreateExtendedClaimSet);
var identity = new ClaimsIdentity(Options.AuthenticationType);
identity.AddClaims(claims);
var ticket = new AuthenticationTicket(identity, new AuthenticationProperties());
return Task.FromResult(ticket);
}
}
问题是 GetClaimsFromCertificate
不再出现在基类或 ClaimsIdentity
类中。我猜它被移动了,但我已经搜索了所有明显的地方并画了一个空白。有谁知道这个有用的方法发生了什么?
最佳答案
您可以尝试使用 Thinktecture.IdentityModel Nuget 包并使用以下代码创建身份:
var identity = Identity.CreateFromCertificate(cert, Options.AuthenticationType, Options.CreateExtendedClaimSet);
在 X509Util 类上有一个 GetClaimsFromCertificate 记录在 Mi 的此处 http://referencesource.microsoft.com/#System.IdentityModel/System/IdentityModel/X509Util.cs但它是内部的:(
关于c# - 使用 Owin 的客户端证书身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31859412/