我创建了一些 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>
当我第一次访问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>
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>
然后我发布了开发者门户并尝试访问这些操作。
GET操作-
POST 操作-
即使我尝试事先访问 Post 操作,也不会被要求选择证书。
验证您的政策并在进行更改后发布开发者门户。