如何从OnAuthorization访问ClientCertificate

时间:2019-06-12 17:49:56

标签: c# asp.net-web-api2 httprequest client-certificates .net-standard-2.0

我已经在Web Api中创建了一个属性([ValidateCertificate]),以检查每次调用中附带的证书。我想访问ClientCertificate属性以验证传入的证书。这来自Microsoft的文档:

public System.Web.HttpClientCertificate ClientCertificate { get; }

但是,该属性在我的代码中不存在。这是我的代码段:

    public async override void OnAuthorization(HttpActionContext httpContext)
    {
        try
        {
            X509Certificate2 cert = httpContext.Request.ClientCertificate; // This property doesn't exist.

看起来该属性应该在HttpRequest对象中,但是我只能在此属性代码内访问HttpRequestMessage对象。我想可以归结为:

  1. 传入参数中包含证书吗?
  2. 如何转换为可以使用的类型?

1 个答案:

答案 0 :(得分:0)

WebApi正在使用您所检查的文档所指定的类。又是,您看到了错误的文档。

从AuthorizationFilterAttribute创建派生的属性类时,系统将提示您引用Nuget的软件包“ Microsoft.AspNet.WebApi.Core”(仅当使用dotnet core时),并使用“ System.Net.Http”引用您的项目。并且还需要添加另外两个使用“ System.Web.Http.Controllers”和“ System.Net.Http”的文件。完成这些操作之后,您可以使用名为“ actionContext.Request.GetClientCertificate()”的扩展方法来通过OnAuthorization方法获取客户端证书。