【Azure API 管理】APIM不能连接到 App Service (APIM cannot connect to APP service)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【Azure API 管理】APIM不能连接到 App Service (APIM cannot connect to APP service)相关的知识,希望对你有一定的参考价值。

参考技术A

APIM 无法正确连接到App Service,返回500错误:

单独访问App Service,是可以成功的。当通过APIM访问时候就出现了500错误

根据博文“ 【Azure API 管理】为调用APIM的请求启用Trace -- 调试APIM Policy的利器 ” 中的内容,启用APIM Trace后,在 Backend 发现真实的错误消息为:
error message :The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.

这个错误信息指示,后端服务适用的证书问题。当APIM的后端服务所配置的证书为自签名证书,而不是跟CA证书时,通常就会遇见次错误。 APIM服务部署在Windows操作系统所运行的PaaS VM托管上的Azure服务中。因此每个APIM实例都信任所有Windows 系统默认的根证书颁发机构。这个问题的解决办法为:

1:添加一个由受信任的CA机构颁发证书到App Service上。

2:禁止APIM与后端App Service之间的证书链验证。使用 New-AzApiManagementBackend 或 Set-AzApiManagementBackend 对APIM中所配置的后端服务 设置-SkipCertificateChainValidation 为True。

示例命令为:

Set-AzApiManagementBackend : https://docs.microsoft.com/en-us/powershell/module/az.apimanagement/set-azapimanagementbackend?view=azps-7.3.0&viewFallbackFrom=azps-4.8.0

New-AzApiManagementBackend : https://docs.microsoft.com/en-us/powershell/module/az.apimanagement/new-azapimanagementbackend?view=azps-7.3.0&viewFallbackFrom=azps-4.8.0

Troubleshooting 4xx and 5xx Errors with Azure APIM services : https://techcommunity.microsoft.com/t5/azure-paas-blog/troubleshooting-4xx-and-5xx-errors-with-azure-apim-services/ba-p/2115744

分类: 【Azure API 管理】

标签: APIM , App Service , APIM cannot connect to APP service , Could not establish trust relationship , for the SSL/TLS secure channel

Azure 门户、开发人员门户和 Postman 之间的 APIM 响应标头不同

【中文标题】Azure 门户、开发人员门户和 Postman 之间的 APIM 响应标头不同【英文标题】:APIM Response Headers Different Between Azure Portal, Developer Portal and Postman 【发布时间】:2019-07-17 03:15:48 【问题描述】:

我正在学习 Azure API 管理,发现 Azure 门户、开发者门户和 Postman 之间的响应标头不同。

我正在此端点上执行 HTTP Get: https://secondattempt.azure-api.net/speakers

使用https://conferenceapi.azurewebsites.net/ 作为 Web 服务 URL。

我在这里比较了它们:

Azure 门户:

    缓存控制 编译指示 传输编码 内容类型 过期 Set-Cookie (不存在) 日期 Op-Apim-Trace-Location 变化

开发者门户:

    缓存控制 编译指示 传输编码 内容类型 过期 设置 Cookie 日期 Ocp-Apim-Trace-Location 变化(不存在)

邮递员:

    缓存控制 编译指示 传输编码 内容类型 过期 设置 Cookie 日期 Ocp-Apim-Trace-Location (不存在) 变化(不存在)

以下是它们在 UI 中的实际外观:

Azure 门户:

开发者门户:

邮递员:

为什么某些标头存在于某些环境中而其他环境中不存在?

另外,为什么标题以不同的顺序出现?

【问题讨论】:

【参考方案1】:

    对于邮递员(Ocp-Apim-Trace-Location 不存在)

    OCP-Apim-Trace 功能使您能够指定 APIM 是否应在 blob 存储上生成跟踪文件。

    从 Postman 发出 GET 请求时,OCP-Apim-Trace 未启用。

    例如,在 Postman 中将标头设置为“true”,将在响应中返回一个名为 OCP-Apim-Trace-Location 的 HTTP 标头。

    这将包含您的跟踪文件的 URL,您可以在任何浏览器中打开该文件。

    对于 Postman 和 Developer 门户(不重新发送)

    请求未缓存。对 URL 的每个请求都应该被视为唯一且不可缓存的请求。

    对于 Azure 门户(Set-Cookie 不存在)

    查看 Trace 然后转发请求,我们确实看到了 "name": "Set-Cookie", "value": "ARRAffinity

【讨论】:

以上是关于【Azure API 管理】APIM不能连接到 App Service (APIM cannot connect to APP service)的主要内容,如果未能解决你的问题,请参考以下文章

我们可以在不使用 SAS 令牌的情况下通过 c# 代码调用 Azure API 管理吗

Azure APIM 定价层和虚拟网络

api 的 Azure Apim 身份验证

如何通过 API App 公开 Azure APIM API?

使用 Azure APIM 策略处理表单数据

从 APIM 策略获取 Azure 表存储实体