gpt4 book ai didi

azure - 当值未硬编码时,api 管理客户端证书身份验证失败

转载 作者:行者123 更新时间:2023-12-02 06:44:01 26 4
gpt4 key购买 nike

我正在我的 API 管理组件上设置客户端身份验证。我希望客户端在访问任何 API 之前先向我的 API 管理进行身份验证(因此 API 管理是服务器,API 用户是客户端,而不是后端服务的客户端身份验证)

根据 Microsoft 的说法,我可以做到这一点 ( https://learn.microsoft.com/en-us/azure/api-management/api-management-howto-mutual-certificates-for-clients )。但是,当我尝试根据我上传的所有受信任证书验证我的证书的指纹时,由于客户端证书无效而失败。我使用了与 Microsoft 提供的相同的策略代码:

<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>

现在,当我使用硬编码指纹进行检查时,它成功了:

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

我将我的客户端证书上传到 CA 证书。我无法将其上传到 API 管理的客户端证书中,因为我没有私钥。只有客户才会拥有它们,并且他们只会发送其公共(public)证书,以便当我信任它们时我可以将其上传到我的 API 管理实例中。

我认为检查所有证书的策略可能是错误的,它可能只检查我的客户端证书中的证书。它是否正确?如果是这样,是否可以检查我上传到 API 管理的所有 ca 证书?

最佳答案

这仅在您将其上传到客户端证书时才有效。 context.Deployment.Certificates 是客户端证书集合。我知道这可能看起来违反直觉,这是因为 context.Deployment.Certificates 并不意味着完全像这样使用。它持有 APIM 用于向后端验证自身身份的证书,因此需要提供私钥。

如果您无权访问客户端证书的私钥,并且所有私钥均由几个 CA/根证书颁发,请考虑上传 CA/根证书并使用 context.Request.Certificate.Verify 来验证链。

关于azure - 当值未硬编码时,api 管理客户端证书身份验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56110473/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com