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

标签 c# owin client-certificates

我正在尝试使用 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/

相关文章:

authentication - 如何设置 IIS 来验证客户端证书并将其作为 http header 传递到后端?

c# - 从数据库中获取数据并显示在DataGridView中

asp.net-mvc - 使用 OWIN 基于区域的身份验证

java - 在 Android (Java) 中创建和导入 PKCS12 证书

c# - 使用来 self 的 API 的访问 token 对 C# MVC Web 应用程序进行身份验证的最佳方法

c# - 在非管理员帐户下运行自托管的 OWIN 网站

asp.net - 如何静默请求特定的 SSL 客户端证书

c# - NInject 单例 - 它们是在应用程序级别还是在 session 级别创建的?

c# - ListView 列是否有可显示的最大长度?

c# - 在 fiddler core 的新版本 (4.6.3.50306) 中缺少一些首选项