标签: azure-api-management

Azure 应用程序网关未传递客户端证书

我已经拿起了别人设置的东西。我们有一个 API 管理实例,位于应用程序网关后面,它具有 API 策略:

<inbound>
        <choose>
            <when condition="@(context.Request.Certificate == null)">
                <return-response>
                    <set-status code="403" reason="Client certificate required..d1PD" />
                </return-response>
            </when>
        </choose>
        <choose>
            <when condition="@(!context.Request.Certificate.Verify())">
                <return-response>
                    <set-status code="403" reason="Client certificate cannot be verified..d2PD " />
                </return-response>
            </when>
        </choose>
        <choose>
            <when condition="@(!context.Deployment.Certificates.Any(c => c.Value.Thumbprint == context.Request.Certificate.Thumbprint))">
                <return-response>
                    <set-status code="403" reason="Client certificate is untrusted or invalid..d3PD" />
                </return-response>
            </when>
        </choose>
        <base />
    </inbound>
Run Code Online (Sandbox Code Playgroud)

在邮递员中,我正在传递证书和密钥。邮递员控制台显示

Client Certificate:
keyPath:"C:\selfsigned\internalscm.X.com.key"
pemPath:"C:\selfsigned\internalscm.X.com.crt"
pfxPath:""
Run Code Online (Sandbox Code Playgroud)

我正在传递Ocp-Apim-Trace请求的标头,因此我得到了包含以下内容的跟踪:

traceEntries        {2}
  inbound       [10]
..
    6       {4}
        source  :   authentication-certificate
        timestamp …
Run Code Online (Sandbox Code Playgroud)

ssl azure azure-api-management

5
推荐指数
1
解决办法
5773
查看次数

Azure API 管理“无法完成请求。请稍后重试。”

每当我尝试测试 API(使用 API 刀片的“测试”选项卡)时,我都会得到 Could not complete the request. Please try again later.

我的 API 管理服务上已经发生这种情况至少两个小时了。我创建了一个额外的 API 管理服务和另一个订阅(带有自己的 APIM)。

我处于消费层(SLA 为 99.9%),Azure 状态页面全面显示绿色。我自己的个人仪表板(服务运行状况)正在显示No service issues found

这让我认为这是我所做的事情。

我该如何着手调查此事?

azure azure-api-management

5
推荐指数
1
解决办法
5933
查看次数

在策略定义中返回响应时如何使用变量?

我正在 Azure API 管理的实例中配置入站策略。

首先,我设置一个变量:

<set-variable name="var1" value="" />
Run Code Online (Sandbox Code Playgroud)

然后我发送一个请求

<send-request mode="new" response-variable-name="var1" timeout="20" ignore-error="false">
Run Code Online (Sandbox Code Playgroud)

它返回一个 JSON。测试时,我在跟踪选项卡中收到以下消息:

已发送对“ https://my-api.azure-api.net/api/data ”的 GET 请求,结果存储在“var1”变量中。

我猜发送请求策略有效并且结果存储在变量中。然后我想返回一个响应(仍在入站中,当尝试在出站中执行此操作时,我得到 500):

<return-response response-variable-name="existing response variable">
    <set-status code="200" reason="OK" />
    <set-header name="Content-Type" exists-action="override">
        <value>application/json</value>
    </set-header>
    <set-body>
    {
        "success": true,
        "var1": context.Variables["var1"]
    }
    </set-body>
</return-response>
Run Code Online (Sandbox Code Playgroud)

我的问题是它不起作用......它只是渲染context.Variables["var1"]

也是如此:

  • @context.Variables["var1"]
  • @{ context.Variables.GetValueOrDefault<string>("var1") }
  • @context.Variables.GetValueOrDefault("var1")

所有这些都按书面形式呈现,没有提取任何价值。

编辑:我还尝试添加占位符字符串,然后使用

<find-and-replace from="Placeholder" to="context.Variables.GetValueOrDefault("var1")" />
Run Code Online (Sandbox Code Playgroud)

并尝试将其放置在入站和出站中。但这一政策并未推出。

这是一个 JSON 对象,我想将其附加到响应中(小细节:实际上我遇到了多个变量的问题)。

我的问题是:如何将声明的变量添加到响应中?

string-concatenation azure azure-api-management

5
推荐指数
1
解决办法
3万
查看次数

在 APIM 上禁用弱 TLS 密码套件

我刚刚发现我刚刚运行的报告中列出了一些弱密码:

TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (0xc028) ECDH secp384r1(相当于 7680 位 RSA)FS 弱 256

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (0xc027) ECDH secp384r1(相当于 7680 位 RSA)FS 弱 128

TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (0xc014) ECDH secp384r1(相当于 7680 位 RSA)FS 弱 256

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (0xc013) ECDH secp384r1(相当于 7680 位 RSA)FS 弱 128

TLS_RSA_WITH_AES_256_GCM_SHA384 (0x9d) 弱 256 TLS_RSA_WITH_AES_128_GCM_SHA256 (0x9c) 弱 128 TLS_RSA_WITH_AES_256_CBC_SHA256 (0x3d) 弱 256 TLS_RSA_WITH_AES_128_CBC_SHA256 (0x) 3c) 弱 128 TLS_RSA_WITH_AES_256_CBC_SHA (0x35) 弱 256 TLS_RSA_WITH_AES_128_CBC_SHA (0x2f) 弱 128

我只配置了这些密码:

TLS 1.2(按服务器首选顺序排列的套件)

TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (0xc030) ECDH secp384r1(等价 7680 位 RSA) FS 256

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f) ECDH secp384r1(等价 7680 位 …

powershell azure-api-management azure-web-app-service ibm-api-management

5
推荐指数
0
解决办法
941
查看次数

Azure API 管理:原始标头丢失或为空,并且请求被分类为非跨域。未应用 CORS 政策

我正在使用 Azure API 管理,并且需要使用它来管理三个 API。测试时,GET 方法工作正常,但是 post 方法出现以下错误:

原始标头丢失或为空,并且请求被归类为非跨域。未应用 CORS 政策。

我四处搜寻并发现了 CORS 和 APIM 的许多问题,但到目前为止我还没有看到我的具体问题。

CORS策略的当前配置是

<policies>
<inbound>
    <cors>
        <allowed-origins>
            <origin>*</origin>
        </allowed-origins>
        <allowed-methods>
            <method>GET</method>
            <method>POST</method>
        </allowed-methods>
    </cors>
</inbound>
<backend>
    <forward-request />
</backend>
<outbound />
<on-error />
</policies>
Run Code Online (Sandbox Code Playgroud)

我在以下地方寻找答案:

https://learn.microsoft.com/en-us/azure/api-management/api-management-cross-domain-policies

Azure API 管理 CORS:为什么我会收到“以‘Access-Control-’开头的标头已被删除...”

https://briancaos.wordpress.com/2018/04/05/azure-api-management-configure-cors-in-the-policy/

我的问题是 1. 我需要如何制定 CORS 策略,2. 我是否需要在 API Startup.cs 或配置文件中添加任何内容来处理 CORS?

谢谢?

azure cors azure-api-management

5
推荐指数
1
解决办法
9020
查看次数

自动从 Azure Function App 更新到 API 管理

鉴于可以按照此处所述将 Azure Functions 导入到 API 管理,那么当 Azure Functions 发生更改时,我们如何使 API 保持最新状态?例如,如果函数签名发生更改或者添加或删除函数。如何实现此过程自动化,以便一旦 Azure Functions 发生更改,这些更改就会反映在 API 中?

Microsoft 的 API 管理团队在这里提出了一个解决方案,但我不清楚如何将该解决方案与 Azure Function App 作为 API 的后端一起应用。

azure azure-api-management azure-devops azure-functions

5
推荐指数
1
解决办法
2129
查看次数

指定的 Swagger 版本未知。Azure APIM ARM 模板

仅当我通过 ARM 模板部署时,当我从门户尝试成功时,我才会遇到此问题。我认为问题可能出在我使用的版本上,所以我更改了模板中的最后 3 个版本( https://learn.microsoft.com/en-us/azure/templates/microsoft.apimanagement/service/apis ),还是同样的问题。有人可以指出我这里出了什么问题吗?我添加了最小复制。

昂首阔步:

{
  "openapi": "3.0.1",
  "info": {
    "title": "Test",
    "description": "Test",
    "version": "1.0"
  },
  "paths": {
    "/api/v1/test": {
      "get": {
        "tags": [
          "Test"
        ],
        "summary": "Test",
        "parameters": [
          {
            "name": "TestName",
            "in": "query",
            "schema": {
              "minLength": 3,
              "type": "string",
              "nullable": true
            }
          }
        ],
        "responses": {
          "500": {
            "description": "Server Error",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": …
Run Code Online (Sandbox Code Playgroud)

azure-api-management azure-devops azure-rm-template openapi

5
推荐指数
1
解决办法
2725
查看次数

使用 Azure AD 通过 OAuth2 对 Azure API 管理进行身份验证

我正在尝试通过 AzureAD 使用 OAuth2 来保护 APIM API,方法是阅读以下文章:通过使用 Azure AD 的 OAuth 2.0 授权保护 Azure API 管理中的 Web API 后端

AzureAPIM - OAuth2

AzureAD - 后端应用程序:

  • 范围:文件.全部

AzureAD - 客户端应用程序:

对于演示会议 API,将验证 JWT 策略添加到入站处理,其中3a0cf09b-是租户 id,b7c31179-是后端应用程序应用程序 id: 在此输入图像描述

在开发人员门户中,AzureAD 身份验证成功并返回令牌: 在此输入图像描述

但是调用API授权失败: 在此输入图像描述

检查 jwt.io 中收到的令牌,我发现"aud": "00000003-0000-0000-c000-000000000000"不是后端应用程序应用程序 ID:

{
  "aud": "00000003-0000-0000-c000-000000000000",
  "iss": "https://sts.windows.net/3a0cf09b-xxx/", …
Run Code Online (Sandbox Code Playgroud)

oauth-2.0 azure-active-directory azure-api-management

5
推荐指数
1
解决办法
1万
查看次数

Microsoft Azure API 管理 - 缓存策略不起作用

我尝试在Azure API管理中设置缓存策略,如下所示:

<policies>
    <inbound>
        <base />
        <cache-lookup vary-by-developer="false" vary-by-developer-groups="false" must-revalidate="true" downstream-caching-type="none" caching-type="internal">
            <vary-by-query-parameter>KontoNr</vary-by-query-parameter>
        </cache-lookup>
        <set-backend-service id="apim-generated-policy" backend-id="LogicApp_GeldEinzahlen_APIM_f597e3433e7847cb9d689c3f95bf1d6d" />
        <validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized. Access token is missing or invalid.">
            <openid-config url="https://login.microsoftonline.com/1b7c4ba5-7701-49e7-94d8-5ddbc87f8b6e/v2.0/.well-known/openid-configuration" />
            <required-claims>
                <claim name="aud">
                    <value>7068cdb6-0e5c-49c5-aaa8-ec8fc941de22</value>
                </claim>
            </required-claims>
        </validate-jwt>
        <set-variable name="isKontoNr" value="@(context.Request.MatchedParameters["kontoNr"].ToString().Length != 10)" />
        <choose>
            <when condition="@(context.Variables.GetValueOrDefault<bool>("isKontoNr"))">
                <return-response>
                    <set-status code="400" reason="Bad Request" />
                    <set-header name="WWW-Request" exists-action="override">
                        <value>Generell error="kontoNr invalid"</value>
                    </set-header>
                </return-response>
            </when>
        </choose>
    </inbound>
    <backend>
        <base />
    </backend>
    <outbound>
        <base />
        <cache-store duration="1000" />
    </outbound>
    <on-error>
        <base />
    </on-error>
</policies> …
Run Code Online (Sandbox Code Playgroud)

cache-control azure policies azure-api-management ibm-api-management

5
推荐指数
1
解决办法
1813
查看次数

通过 terraform 发布 APIM 开发者门户

您好,我已经搜索了文档,但找不到如何通过 terraform 发布开发人员门户。我的 terraform 确实使用 API 管理服务资源来假脱机资源组,但我希望它也发布开发人员门户并启用 CORS。这可以通过 terraform 实现吗?还是必须在 rg 假脱机后手动完成?

在此输入图像描述

更新了 terraform,查看此处的文档:https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/api_management#host_name

开发者门户有一个块,但我不确定这是否真的发布了它,也不确定在主机名中放入什么。请协助。

azure wso2-api-manager azure-api-management terraform

5
推荐指数
1
解决办法
1792
查看次数