C# 使用Owin的客户端证书身份验证
我正在尝试使用OWIN管道实现客户端证书身份验证,根据Dominick Baier 2013年底的博客(),您可以通过创建自定义身份验证处理程序来实现:C# 使用Owin的客户端证书身份验证,c#,owin,client-certificates,C#,Owin,Client Certificates,我正在尝试使用OWIN管道实现客户端证书身份验证,根据Dominick Baier 2013年底的博客(),您可以通过创建自定义身份验证处理程序来实现: public class ClientCertificateAuthenticationHandler : AuthenticationHandler<ClientCertificateAuthenticationOptions> { protected override Task<AuthenticationTick
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);
}
}
公共类ClientCertificateAuthenticationHandler:AuthenticationHandler
{
受保护的覆盖任务AuthenticateCoreAsync()
{
var cert=Context.Get(“ssl.ClientCertificate”);
如果(证书==null)
{
返回Task.FromResult(空);
}
尝试
{
选项.Validator.Validate(证书);
}
抓住
{
返回Task.FromResult(空);
}
var索赔=GetClaimsFromCertificate(证书、证书颁发者、选项、CreateExtendedClaimSet);
var identity=新的ClaimsIdentity(Options.AuthenticationType);
身份。添加索赔(索赔);
var ticket=newauthenticationticket(identity,newauthenticationproperties());
返回任务.FromResult(票证);
}
}
问题是
GetClaimsFromCertificate
不再出现在基类或ClaimsIdentity
类中。我猜它被移动了,但我已经搜索了所有明显的地方,并画了一张空白。有人知道这个有用的方法发生了什么吗?您可以尝试使用Thinktecture.IdentityModel numget包,并使用下面的代码创建标识:
var identity = Identity.CreateFromCertificate(cert, Options.AuthenticationType, Options.CreateExtendedClaimSet);
Mi at中记录的X509Util类上有一个GetClaimsFromCertificate,但它是内部的:(我有点晚了,但我也遇到了同样的问题,根据
GetClaimsFromCertificate
包含在Microsoft.IdentityModel.Claims
namespace中,您可以从NuGet的Microsoft.IdentityModel包中获得它。我还没有尝试过,但我希望这可以帮助您:)