为啥外部使用者的 Azure API 管理中的客户端身份验证需要 PFX 文件?

Posted

技术标签:

【中文标题】为啥外部使用者的 Azure API 管理中的客户端身份验证需要 PFX 文件?【英文标题】:Why a PFX file is required for Client Authentication in Azure API Management for external consumer?为什么外部使用者的 Azure API 管理中的客户端身份验证需要 PFX 文件? 【发布时间】:2018-03-13 19:49:40 【问题描述】:

此article 解释说,使用 azure api 管理可以进行客户端认证身份验证。以下是这篇文章的摘录:

API 管理提供了使用客户端证书保护对 API 的访问(即客户端到 API 管理)的能力。目前,您可以根据所需值检查客户端证书的指纹。您还可以根据上传到 API 管理的现有证书检查指纹。

它包含指向another article 的链接,该链接解释了如何将客户端证书添加到 azure api 管理,以便在仅与后端服务通信时使用客户端证书身份验证的上下文中使用客户端证书。这显然需要加载一个 PFX 文件(其中包含私钥)。

但是,我有兴趣使用 api 管理来验证来自我在 api 管理中托管的 API 的消费者的客户端证书。第一篇文章似乎表明api管理可以接收客户端证书以验证消费者。第一篇文章中的一个策略如下所示:

<choose>
    <when condition="@(context.Request.Certificate == null || !context.Deployment.Certificates.Any(c => c.Value.Thumbprint == context.Request.Certificate.Thumbprint))" >
        <return-response>
            <set-status code="403" reason="Invalid client certificate" />
        </return-response>
    </when>
</choose>

这意味着我应该只能从我的 API 使用者上传客户端证书的公共部分。然而,它不允许非 pfx 文件。 我在这里错过了什么?

【问题讨论】:

这是个好问题。让我调查一下。同时,我建议直接在策略中检查指纹值。或者您可以创建一个全局属性来保存指纹。 会的。但是,仅检查传入客户端证书的指纹是否安全?或者仅检查指纹有什么注意事项? 如果证书无效,则指纹将无法供您验证。我相信有人能够伪造具有确切指纹的证书的风险非常低。 Darrel:你在调查中发现了什么? 【参考方案1】:

抱歉耽搁了。您可以上传的证书主要用于通过后端进行身份验证。进行客户端证书验证的推荐解决方案只是检查策略中的指纹值。如果您认为能够仅使用公钥上传客户端证书很有价值,请将其添加到我们的用户语音中。 http://aka.ms/apimwish

【讨论】:

以上是关于为啥外部使用者的 Azure API 管理中的客户端身份验证需要 PFX 文件?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的后端中的 axios 发布请求没有将任何数据发送回我的外部 api? -

为啥 SQL Server 2019 与 Azure SQL 数据库中的外部表语法不同? `

为啥 Task.Delay 不能在 Azure Function App 中工作?

外部客户端无法访问 Azure Service Fabric 上的 WCF 通信侦听器

通过 Azure API 管理生成访问令牌并针对 IdentityServer4 进行验证

如何使用 Azure API 管理为 API 中的每个方法设置 405 Method Not Allowed