azure-api-management 相关问题

Azure API Management是一种云托管服务,可以在任何平台上为现有HTTP API添加许多功能。这包括与安全性,API密钥管理,缓存,文档和许多其他交叉策略相关的功能。有关详细信息,请参阅:http://azure.microsoft.com/apim

Azure APIM:检查参数是否已存在于字典中

在 APIM 中,在其中一个 API 内,我在“所有操作”内有一个与此类似的策略: 在 APIM 中,其中一个 API 内,我在“所有操作”内有一个与此类似的策略: <policies> <inbound> <base /> </inbound> <backend> <base /> </backend> <outbound> <base /> <choose> <when condition="@(context.Variables["xvar"] == null || (string)context.Variables["xvar"] == "oneValue")"> <trace source="info" severity="information"> <message>Hi, xvar exist</message> </trace> </when> <otherwise /> </choose> </outbound> <on-error> <base /> </on-error> </policies> 变量 xvar 确实存在于该 API 中的少数操作中,例如t1。那里的政策看起来与此类似: <policies> <inbound> <set-variable name="xvar" value="oneValue" /> <base /> <set-backend-service base-url="https://testingtest.com" /> </inbound> <backend> <base /> </backend> <outbound> <base /> </outbound> <on-error> <base /> </on-error> </policies> 但是,此 API 中的大多数操作中并不存在此变量,例如t2。因此,当我调用此操作时,我收到此错误: choose (1.469 ms) { "messages": [ { "message": "Expression evaluation failed.", "expression": "context.Variables[\"xvar\"] == null || (string)context.Variables[\"xvar\"] == \"oneValue\"", "details": "The given key was not present in the dictionary.\r\n at System.Collections.Generic.Dictionary`2.get_Item(TKey key)" }, "Expression evaluation failed. The given key was not present in the dictionary.\r\n at System.Collections.Generic.Dictionary`2.get_Item(TKey key)", "The given key was not present in the dictionary." ] } 我应该改变“所有操作”中的条件来检查字典中是否存在或不存在变量 请使用以下表达式检查所有操作中变量是否存在: context.Variables.ContainsKey("xvar") 所有操作 - 政策: <policies> <inbound> <base /> <set-backend-service base-url="http://echoapi.cloudapp.net/api" /> </inbound> <backend> <base /> </backend> <outbound> <base /> <choose> <when condition="@(context.Variables.ContainsKey("xvar") && !context.Variables.GetValueOrDefault<string>("xvar").Equals(string.Empty))"> <trace source="info" severity="information"> <message>Hi, xvar exist</message> <metadata name="xvar" value="@(context.Variables.GetValueOrDefault<string>("xvar"))" /> </trace> </when> <otherwise /> </choose> </outbound> <on-error> <base /> </on-error> </policies> t1 - 政策: <policies> <inbound> <set-variable name="xvar" value="oneValue" /> <base /> <set-backend-service base-url="http://echoapi.cloudapp.net/api" /> </inbound> <backend> <base /> </backend> <outbound> <base /> </outbound> <on-error> <base /> </on-error> </policies> t2 - 政策: <policies> <inbound> <base /> <set-backend-service base-url="http://echoapi.cloudapp.net/api" /> </inbound> <backend> <base /> </backend> <outbound> <base /> </outbound> <on-error> <base /> </on-error> </policies> 这会跟踪 t1 和 t2 的以下消息: 出站 t1 - 选择: { "message": "Expression was successfully evaluated.", "expression": "context.Variables.ContainsKey(\"xvar\") && !context.Variables.GetValueOrDefault<string>(\"xvar\").Equals(string.Empty)", "value": true } 出站 t1 - 追踪: { "message": "Expression was successfully evaluated.", "expression": "context.Variables.GetValueOrDefault<string>(\"xvar\")", "value": "oneValue" } 出境t2 - 选择: { "message": "Expression was successfully evaluated.", "expression": "context.Variables.ContainsKey(\"xvar\") && !context.Variables.GetValueOrDefault<string>(\"xvar\").Equals(string.Empty)", "value": false }

回答 1 投票 0

我可以使用 OAuth 令牌作为 Ocp-Apim-Subscription-Key 的替代品吗?

我正在考虑使用 Azure API 管理为许多后端 API 提供一致的前端。 大多数 API 使用 OAuth 2.0 应用程序流程进行保护(ClientID + 客户端密钥,...

回答 2 投票 0

为 Azure 中的一个 API 创建多个订阅密钥

我正在寻求快速胜利来保护具有多个订阅密钥的 API,以便将它们分配给不同的提供商并允许单独访问。我知道 Oauth2 可能是最好的...

回答 1 投票 0

Azure APIM 导入 OpenAPI 规范在 GitHub 构建操作中失败

从我的 GitHub Build 操作登录到 Azure 后,我尝试更新我的 APIM OpenAPI 规范以使其与我的源代码保持同步。 我尝试通过执行以下命令来做到这一点: - 名称:更新

回答 1 投票 0

尝试通过 Terraform 更新 Azure API 网关操作后端时出现问题

我想要的只是使用开放 API yaml 文档中定义的 api 操作来部署我的 Azure API 网关。我的下面的代码部署了 Windows 函数应用程序和 API 网关,我也可以看到

回答 1 投票 0

如何在 Blazor Wasm 中阻止 HttpClient/浏览器请求客户端证书

使用 HTTP 客户端从 Blazor WASM 调用 APIM 上的 API 时,系统会要求用户选择客户端证书。我们不需要这种额外的身份验证方法,因为该方法的安全性是...

回答 1 投票 0

除非取消并立即调用 Azure API 服务 (APIM),否则为什么我会收到 ECONNRESET?

我有一个经过身份验证的 Azure 应用服务证书。该服务位于 APIM 后面,负责进行身份验证。自某些天以来,此服务现在会系统地返回 ECONNRESET 错误,当...

回答 1 投票 0

Azure API 管理 - 命名值

有没有办法让命名值记录文本和表达式的组合。下面给出了我想要实现的示例格式,不幸的是我尝试了所有方法,但表达式是...

回答 1 投票 0

Azure API 管理 URL 未连接到 API

我是 API 管理新手。我创建了一个管理资源,已将函数应用程序连接到该资源,此外,我还确保需要订阅才能访问 API/函数...

回答 1 投票 0

将 SignalR 与 Azure APIM 和应用程序网关结合使用时连接失败

就上下文而言,我当前使用的 Azure 环境具有以下核心组件: Azure APIM > 应用程序网关 > Web 应用程序防火墙 > Vnet > ASE > 应用程序服务...

回答 1 投票 0

内部和外部的 Azure Api 管理基本层

您对我应该如何使用端点创建 Azure api 管理有什么建议吗 GET /users 只能从我们公司内部网络访问 使用 ip 过滤获取内部和外部的 /cars...

回答 1 投票 0

通过 Azure APIM 将 AD 令牌传递到 Dynamics Web API 服务

我有一个 Azure APIM 服务,它在后台连接到 Dynamics Web API。我有一个现有的应用程序注册 (backend-crm-api),它公开对 Dynamics Web Api 的访问 - 这是做的...

回答 1 投票 0

Azure 的速率限制策略,用于限制特定订阅无法按预期工作

我的入境政策中有此内容: 我的入境政策中有此内容: <choose> <when condition="@(context.Subscription.Name=="someName")" /> <when condition="@(context.Subscription.Name=="otherName")" /> <otherwise> <rate-limit calls="50" renewal-period="300" remaining-calls-variable-name="remainingCallsPerSubscription" /> </otherwise> </choose> 它似乎没有按预期工作,还限制了上面指定的订阅,我错过了什么吗? 附注我属于消费模式 我使用了相同的策略来免除正在使用的订阅密钥 rate-limit 策略。 出于测试目的,我接听了 10 个电话。 <policies> <inbound> <base /> <choose> <when condition="@(context.Subscription.Name=="test")" /> <when condition="@(context.Subscription.Name=="demo")" /> <otherwise> <rate-limit calls="10" renewal-period="300" remaining-calls-variable-name="remainingCallsPerSubscription" /> </otherwise> </choose> </inbound> <backend> <base /> </backend> <outbound> <base /> </outbound> <on-error> <base /> </on-error> </policies> 测试时,您需要传递订阅密钥名称为Ocp-Apim-Subscription-Key,该值将是您的订阅密钥的值,否则它将获取context.Subscription.Name的值作为Built-in all-access subscription默认情况下。 当 context.Subscription.Name 的值为 false 时,我得到如下所示的预期响应。 为了获得预期的响应,请确保您没有在全局或 API 级别定义任何其他策略。

回答 1 投票 0

Azure API 管理 DevOps 资源工具包的 GitHub 存储库页面上缺少 GitHub 操作示例链接

有 Azure API Management Devops Resource Toolkit GitHub 存储库,它描述了如何将 Azure API 部署到其他 API < instance using resource toolkit and provided some links of samples for

回答 1 投票 0

将 Azure API 管理实例部署到虚拟网络时出现问题 - 内部模式

我在内部模式下将 Azure API 管理实例部署到虚拟网络时遇到一些奇怪的问题。本质上,我正在关注 Microsoft 的这篇文章。 在...中部署 Azure APIM

回答 1 投票 0

如何以自动方式修改与 Azure APIM API 或具有附加策略的操作相关的策略

我正在尝试采用一种自动化的方式来修改或应用有关 Azure APIM 的 API 或操作范围的附加策略,并且在我的脚本中,我能够读取变量 $inbound 或 $outbound 或 $backend 或 $

回答 1 投票 0

Azure APIM 和 validate-azure-ad-token

我有一个 AZURE APIM 服务,可连接到 Dynamics365 数据以检索数据。这是通过应用程序注册完成的。 我希望能够允许用户使用...

回答 1 投票 0

Azure 逻辑应用程序和函数应用程序性能差异

我们正在建立新项目。我们的要求是调用多个 REST API 并聚合响应并将其发送回移动客户端。 我们正在探索这 2 个选项...

回答 2 投票 0

使用 Azure 门户克隆后更新 Azure APIM 名称 (Api.Id)?

是否可以在创建 Azure API 后手动将其 API 名称(又名 Api.Id)更改为其他名称(我知道它必须是唯一的)。 创建新 API 时,名称...

回答 2 投票 0

如何使用 validate-jwt 验证 jwt 令牌时检查错误(之前:如何在 validate-jwt 中使用自定义构建的 jwt?)

我尝试使用 validate-jwt 策略限制使用 JWT 令牌对 REST API 的访问。以前从来没有这样做过。 这是我的入站策略(取自此处的简单令牌验证): 我尝试使用 validate-jwt 策略限制使用 JWT 令牌对 REST API 的访问。以前从来没有这样做过。 这是我的入站策略(取自简单令牌验证此处): <validate-jwt header-name="Authorization" require-scheme="Bearer"> <issuer-signing-keys> <key>{{jwt-signing-key}}</key> </issuer-signing-keys> <audiences> <audience>CustomerNameNotDns</audience> </audiences> <issuers> <issuer>MyCompanyNameNotDns</issuer> </issuers> </validate-jwt> 使用这个生成器我创建了一个声明(我不确定我是否正确理解了发行者和受众): { "iss": "MyCompanyNameNotDns", "iat": 1572360380, "exp": 2361278784, "aud": "CustomerNameNotDns", "sub": "Auth" } 在签名 JSON Web 令牌部分中,我从组合框中选择了生成 64 位密钥。我将生成的密钥放在 {{jwt-signing-key}} 的位置。 现在,我尝试使用 Postman 调用 API。我添加了一个“授权”标头,并将“承载 {{ JWT 由 linked 生成器 }} 创建”作为值。 我收到 401,JWT 不存在。我做错了什么? 根据我的研究,如果您使用 HS256 签名算法,则必须以 Base64 编码形式在策略内内联提供密钥。换句话说,我们必须将密钥编码为 base64 字符串。更多详情请参阅文档 我的测试步骤如下 创建 Jwt 令牌 测试 A。如果我直接在策略中提供密钥,则会收到 401 错误 b.如果我在策略中将密钥编码为 base64 字符串,我可以调用 api Jim Xu 的回答将密钥编码为策略中的 base64 字符串让我能够走到这一步:-) 我将 Ocp-Apim-Trace 参数设置为 true,以便更仔细地调试它。我按照 ocp-apim-trace-location 下的响应中提供的链接进行操作,在“错误”部分中我发现了以下消息: JWT Validation Failed: IDX10225: Lifetime validation failed. The token is missing an Expiration Time. Tokentype: 'System.IdentityModel.Tokens.Jwt.JwtSecurityToken'.. 这很有趣,因为我已将过期时间...设置为 2099。 我把它改为一个月后,效果很好。 您可以使用此网站https://www.base64encode.org/,而不是使用“Convert.ToBase64String(Encoding.UTF8.GetBytes(”),并将您的令牌密钥转换为 Base64 字符串,并将其直接作为密钥API 管理。 它对我有用。

回答 3 投票 0

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