【问题标题】:Azure Virtual Machine - Rest API calls are not workingAzure 虚拟机 - Rest API 调用不起作用
【发布时间】:2019-12-13 15:51:15
【问题描述】:

我们正在 azure 虚拟机上开发一个应用程序,VM 安装了 ngnix 和 TLS 1.2 版。该应用程序由执行 salesforce 和 office365 oauth 流程的两个操作组成。该应用在本地和 Azure 应用服务上也运行良好。

问题

出于某种原因,我们正在将应用移至 azure VM。这是问题所在,在 oauth 之后流程返回一个代码,我们需要通过对 office365 端点的 https 请求使用该代码生成 access_token。端点响应是超时或错误读取 ECONNRESET。

分析

唯一有效的 URL,

  1. http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net
  2. https://myapp.vault.azure.net/secrets/{Secret-Name}?api-version=2016-10-01

以上都用于获取访问令牌和密钥库机密。幸运的是,这工作得很好,我能够从 azure key vault 中获取所有秘密。

但以下网址要么没有响应超时,要么错误:读取 ECONNRESET

  1. https://login.microsoftonline.com/{Tenant-Id}/oauth2/v2.0/token
  2. https://test.salesforce.com/services/oauth2/token

我也尝试过其他公共或虚假的 rest API,例如,

  1. https://reqres.in/
  2. https://jsonplaceholder.typicode.com/

他们似乎都没有工作。有人遇到过这种问题吗?

【问题讨论】:

  • 您在该 VM 上是否有 Internet 连接?你的本地fireall没有阻止传出连接吗?连接重置通常意味着防火墙正在阻止连接。你是如何配置虚拟网络的?任何UDR(用户定义的路由)? NSG(网络安全组)? NVA(网络虚拟设备)?您的问题似乎是虚拟机/网络本身的网络配置。从而删除 AAD 标记。
  • 您的 VM 的 NSG 是否允许传入流量?
  • 当您检查 Azure VM 内的 NSG 或本地防火墙时,是否有任何防火墙阻止了端口 443 到 Internet 的出站流量?
  • 如何通过url“login.microsoftonline.com{Tenant-Id}/oauth2/v2.0/token”获取访问令牌?您使用哪个系统? Windows 还是 Linux?
  • @astaykov 这是因为防火墙设置发生了一些变化。现在可以用了,谢谢!

标签: azure nginx azure-web-app-service azure-virtual-machine


【解决方案1】:

请澄清 cmets 的答案以获得更多参考。

Error Read ECONNRESET 表示 TCP 会话的另一端突然关闭了它的连接端。这很可能是由于一个或多个应用程序协议错误造成的。详情请参考this SO

此外,您只有来自 Azure 实例元数据服务和 Azure Key Vault 服务的有效 URL,其他公共或虚假的 REST API 是失败的。因此,您正确面对该 VM 或 VNet 本身的 Internet 连接问题。您可以检查防火墙是否在本地 VM 或 NSG 规则上阻止了到 Internet 的出站流量。

最后,防火墙设置的一些更改解决了这个问题。

【讨论】:

    猜你喜欢
    • 2018-08-10
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-30
    • 2016-09-29
    • 2018-05-09
    相关资源
    最近更新 更多