C# 使用Owin的客户端证书身份验证

C# 使用Owin的客户端证书身份验证,c#,owin,client-certificates,C#,Owin,Client Certificates,我正在尝试使用OWIN管道实现客户端证书身份验证,根据Dominick Baier 2013年底的博客(),您可以通过创建自定义身份验证处理程序来实现: public class ClientCertificateAuthenticationHandler : AuthenticationHandler<ClientCertificateAuthenticationOptions> { protected override Task<AuthenticationTick

我正在尝试使用OWIN管道实现客户端证书身份验证,根据Dominick Baier 2013年底的博客(),您可以通过创建自定义身份验证处理程序来实现:

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包中获得它。我还没有尝试过,但我希望这可以帮助您:)