【问题标题】:Client Certificate Authentication using Owin使用 Owin 进行客户端证书身份验证
【发布时间】:2015-10-29 19:36:49
【问题描述】:

我正在尝试使用 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 类中。我猜它已经移动了,但我已经搜索了所有明显的地方并画了一个空白。有谁知道这个有用的方法发生了什么?

【问题讨论】:

  • 我有点晚了,但我遇到了同样的问题,根据MSDN GetClaimsFromCertificate 包含在Microsoft.IdentityModel.Claims 命名空间中,您可以从NuGet 的Microsoft.IdentityModel 包中获取它。我还没有尝试过,但我希望这可以帮助你:)

标签: c# owin client-certificates


【解决方案1】:

您可以尝试使用 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 但它是内部的:(

【讨论】:

    猜你喜欢
    • 2012-01-10
    • 2018-07-05
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    相关资源
    最近更新 更多