Azure APIM:浏览器要求每次在开发者门户中进行 API 测试时选择证书

问题描述 投票:0回答:1

我创建了一些 Azure 函数应用程序并将它们导入 APIM,它们在其中运行良好。但我对某些使用证书身份验证的 API 存在疑问。当我第一次访问 APIM 开发者门户并尝试测试不需要证书的 API 时,浏览器仍然要求我选择证书。

这是预期的情况吗?

有证书认证的API入站策略:

    <inbound>
        <base />
        <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>
            <otherwise />
        </choose>
        <authentication-certificate certificate-id="DevCert" />
        <set-backend-service id="apim-generated-policy" backend-id="sample-func" />
    </inbound>

无证书认证的API入站策略:

    <inbound>
        <base />
        <set-backend-service id="apim-generated-policy" backend-id="sample-func" />
    </inbound>
azure certificate azure-api-management client-certificates apim
1个回答
0
投票

当我第一次访问APIM开发者门户并尝试测试不需要证书的API时,浏览器仍然要求我选择证书。这是预期的情况吗?

不,这不是预期的情况。您不应该获得为没有

authentication-certificate
策略的 API 选择证书的选项,除非您已在全局级别或产品级别添加策略并将该产品附加到 API。

我已将 Azure 函数导入到 APIM 实例,其中有两个操作(GET、POST)。

GET操作的策略如下所示-

<policies>
    <inbound>
        <base />
        <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>
            <otherwise />
        </choose>
        <authentication-certificate certificate-id="DevCert" />
        <set-backend-service id="apim-generated-policy" backend-id="afreen-fa-1" />
    </inbound>
    <backend>
        <base />
    </backend>
    <outbound>
        <base />
    </outbound>
    <on-error>
        <base />
    </on-error>
</policies>

enter image description here

POST操作的策略如下-

<policies>
    <inbound>
        <base />
        <set-backend-service id="apim-generated-policy" backend-id="afreen-fa-1" />
    </inbound>
    <backend>
        <base />
    </backend>
    <outbound>
        <base />
    </outbound>
    <on-error>
        <base />
    </on-error>
</policies>

enter image description here

然后我发布了开发者门户并尝试访问这些操作。

GET操作-

enter image description here

POST 操作-

即使我尝试事先访问 Post 操作,也不会被要求选择证书。

enter image description here

验证您的政策并在进行更改后发布开发者门户。

© www.soinside.com 2019 - 2024. All rights reserved.