Security WebAPI 2的客户端身份验证

Security WebAPI 2的客户端身份验证,security,asp.net-web-api,x509,Security,Asp.net Web Api,X509,我的公司已经编写了一个API来向我们的客户公开我们的应用程序数据。我们已经完成了端点,现在需要保护API。API将仅由预先批准的客户端使用,因此不需要匿名访问。我被告知,我们可以使用生成的x.509证书来识别和验证每个客户机。通过标识,我的意思是将客户机代码嵌入到我们向每个客户机颁发的证书中(这可能吗?)。正如您可能知道的那样,我在使用证书验证客户端方面几乎没有经验,这是一种可靠的方法吗?这是一个非常“棘手”的客户端验证和授权选项。它功能非常强大,但实施起来可能非常昂贵,因为您必须管理完整的(公

我的公司已经编写了一个API来向我们的客户公开我们的应用程序数据。我们已经完成了端点,现在需要保护API。API将仅由预先批准的客户端使用,因此不需要匿名访问。我被告知,我们可以使用生成的x.509证书来识别和验证每个客户机。通过标识,我的意思是将客户机代码嵌入到我们向每个客户机颁发的证书中(这可能吗?)。正如您可能知道的那样,我在使用证书验证客户端方面几乎没有经验,这是一种可靠的方法吗?

这是一个非常“棘手”的客户端验证和授权选项。它功能非常强大,但实施起来可能非常昂贵,因为您必须管理完整的(公钥基础架构),并且必须安全地将证书分发给客户

1) 您需要SSL,并且需要强制实施它(即使是在全球范围内,如果您愿意):

2) 您需要通过application.host配置或使用IIS管理器控制台将IIS配置为接受客户端证书:

<system.webServer>
    <security>
        <access sslFlags="Ssl, SslNegotiateCert" />
        <!-- To require a client cert: -->
        <!-- <access sslFlags="Ssl, SslRequireCert" /> -->
    </security>
</system.webServer>
查看Mike Watson的这篇文章全文(我在这里给了你一个摘录)

这是一个可靠的方法吗


是的,但正如您所看到的,PKI的缺点需要牢记在心。最终,您可以实现OAuth2 auth,它也非常强大,您可以轻松地将其建立在外部提供者的基础上,例如Azure AD。有关更多详细信息,请查看文章。顺便说一句,你也可以从基本的MVC/API模板开始。

谢谢Luca,Mike Watson文章的链接正是我需要的。我们将发行我们自己的证书,因为我们有一组有限的客户机将使用API,因此处理撤销和发行新客户机证书的开销应该是可控的。
<system.webServer>
    <security>
        <access sslFlags="Ssl, SslNegotiateCert" />
        <!-- To require a client cert: -->
        <!-- <access sslFlags="Ssl, SslRequireCert" /> -->
    </security>
</system.webServer>
X509Certificate2 cert = Request.GetClientCertificate();
string issuer = cert.Issuer;
string subject = cert.Subject;