Azure API Management是一种云托管服务,可以在任何平台上为现有HTTP API添加许多功能。这包括与安全性,API密钥管理,缓存,文档和许多其他交叉策略相关的功能。有关详细信息,请参阅:http://azure.microsoft.com/apim
我正在研究 postman 与 Azure API 管理和 Azure DevOps 的集成。 https://blog.postman.com/postman-integration-for-azure-devops-users/ https://learning.postman.com/docs/designing-and-
对于 Azure APIM 中的 API 代理之一,我们希望添加示例,以便开发人员可以登录开发者门户并使用提供给他们的示例快速测试它,这对于 Q...
我想形成一个 KQL 查询来确定给定时间内特定 API 请求的最大 RPS。 例如:确定 App Insights 中特定 API 在 2 个月内的最大 RPS。 我有能力
我正在使用 REST 创建或更新 REST API 在 PowerShell 脚本中创建 APIM 命名值 脚本: $requestPayload = @{ 属性=@{ 显示名称 = $显示名称 keyVau...
我配置了一个虚拟网络 (vnet),它具有为专用端点、Web 应用程序、数据库和 VPN 点到站点等定义的子网... 要点很简单,我不想访问我的任何服务...
通过 Azure API 管理服务调用持久功能状态查询时出现 403 禁止错误
我在 Azure 中配置并运行了 Azure Durable Functions Orchestration 功能。 我还配置了一个 Azure API 管理服务来公开编排功能。 我能成功...
我在 Azure 中配置并运行了 Azure Durable Functions Orchestration 功能。 我还配置了一个 Azure API 管理服务来公开编排功能。 我能成功...
我有一项 Azure APIM 服务,用户可以通过一项服务进行调用以请求数据。不幸的是,在源 API 中,要检索所有必需的信息,我需要迭代初始的
所以,我正在尝试分析系统的性能。我们有 3 种类型的请求 URL。像这样的东西--> 1. https:///recent?param1=string1 https:///最近?p...
在 Azure API 管理上验证第三方 API 密钥/基本身份验证?
我正在考虑使用 Azure API 管理作为我的 API 的网关,并希望在可能的情况下完全处理它的身份验证。 + 目前我正在设置它来验证 JWT...
当 Azure API 管理和 Web 应用程序使用客户端证书身份验证时,如何支持大请求?
客户端证书认证在大请求时出现问题是一个已知问题。 本文介绍了两种可能的解决方案:https://learn.microsoft.com/en-us/archive/blogs/waws/
Azure API 管理策略:根据 json 架构验证请求正文
我正在尝试在Azure API管理中实施内容验证策略。 我创建了一个名为事件的模式。 该政策如下所示: 我正在尝试在 Azure API 管理中实施内容验证策略。 我创建了一个名为 event. 的架构 政策如下: <validate-content unspecified-content-type-action="prevent" max-size="12000" size-exceeded-action="prevent" errors-variable-name="validationErrors"> <content type="application/json" validate-as="json" action="prevent" schema-id="event" schema-ref="#/components/schemas/event" /> </validate-content> 当我尝试测试它时,我在跟踪中收到一条错误消息,指出架构引用错误: "details": "Could not resolve schema reference '#/components/schemas/event'. Path '', line 1, position 1." 文档说: <content type="content type string" validate-as="json|xml|soap" schema-id="schema id" schema-ref="#/local/reference/path" action="ignore|prevent|detect" /> 但我没有找到任何线索如何找到 schema-id 和 schema-ref 属性。 当我打开架构时,屏幕上的“概述”和“属性”下都没有类似的内容。请有人告诉我如何填写这些内容以使政策发挥作用。或者,如果存在,请指出我可以阅读的文档:) schema-id 和 schema-ref 都是可选属性,用于根据 json 模式验证请求正文。 根据此 Azure API 管理验证策略 |微软文档: schema-id:已添加到 API 管理实例以进行内容验证的现有架构的名称。如果未指定,则使用 API 定义中的默认架构。 schema-ref: 对于 schema-id 中指定的 JSON 架构,可选引用 JSON 文档中的有效本地引用路径。例如:#/components/schemas/address。该属性应返回一个 JSON 对象,API 管理将其作为有效的 JSON 架构进行处理。 确保检查Azure API 管理验证策略 |用于内容验证的 Microsoft Docs 架构,无论您是从文件还是 URL 导入,都可以提供正确的架构位置。 正如 @madhuraj 所提到的,schema-id 是您在 Azure APIM 的“架构”部分中添加的架构的名称。 schema-ref 是 API 规范 (swagger/OpenAPI) 中架构定义的路径。 @vilmarci schema-ref 是可选的,但您给出了错误的路径,即“#/components/schemas/event”。 尝试不使用 schema-ref 它会起作用。 基本上在API->Schemas下,我们可以使用名称(Id)定义JSON文档。例如,我们可以定义模式LoginAPI,并在其下定义不同的定义, { "components": { "schemas": { "LoginModel": { "type": "object", "required": [ "email", "password" ], "properties": { "email": "definition", "password": "definition" } } } } } 然后在 validate-content 配置中,您可以使用 schema-id="LoginAPI" 和 schema-ref="#/components/schemas/LoginModel"。
目前在 Application Insights 中,我们遇到了 2 个非常奇怪的问题。 我们的基础设施使用 API 管理,后端是带有多个虚拟应用程序的 Azure 应用服务。 我们正在使用 NE...
Azure Cloud API 在“管理者”字段中检索到错误数据
我使用 Azure 成本管理 API 和 .NET 从 Azure 云检索信息(通过企业协议的服务主体进行身份验证)。 https://management.azure.com
我有一个模拟 api,它当前通过嵌套在入站策略中嵌套的返回响应中的 set-body 根据请求返回包含一些动态数据的响应。不幸的是,主要...
Azure API 管理 - OAuth2.0 客户端凭证授权问题
我正在尝试设置一个 API,该 API 将使用 Azure API 管理来获取 Azure AD B2C 目录中的用户列表。通过 Postman,我可以提出以下请求来获取不记名令牌,...
我正在尝试让我的后端 API 验证请求来自使用托管身份的 Azure APIM,以前这是通过证书身份验证完成的,但由于各种原因我很...
我们目前有一组使用 ws-security 用户名/密码的本地 .net WCF SOAP 服务,因此用户名和密码在 soap 标头中提供,wcf 框架处理
我正在安装 Azure API 管理开发人员门户的开源版本。 我按照 wiki 链接中提到的步骤进行操作,除了 wiki 链接中的第 3 点,作为 org.enterprise github d...
我想将以下策略部署到 azure api 管理: 我想将以下策略部署到 azure api 管理: <policies> <inbound> <base /> <choose> <when condition="@(!context.Variables.ContainsKey(''cachedAccessToken'') || DateTime.UtcNow >= (DateTime)context.Variables[''tokenExpiry''])"> <set-backend-service id="apim-generated-policy" backend-id="{0}" /> <send-request mode="new" response-variable-name="tokenResponse" timeout="20" ignore-error="false"> <set-url>{1}/token</set-url> <set-method>POST</set-method> <set-header name="Content-Type" exists-action="override"> <value>application/x-www-form-urlencoded</value> </set-header> <set-body>@("grant_type=password&username={2}&password=thisShouldRefThe-AmxPassword-NamedValue")</set-body> </send-request> <set-variable name="tokenResponseJson" value="@{{ return JsonConvert.DeserializeObject((string)context.Variables[''tokenResponse''].Body.As<string>()); }}" /> <set-variable name="cachedAccessToken" value="@{{(string)context.Variables[''tokenResponseJson''][''access_token'']}}" /> <set-variable name="tokenExpiry" value="@{{ return DateTime.UtcNow.AddSeconds((int)context.Variables[''tokenResponseJson''][''expires_in''] - 60); }}" /> <cache-store-value key="cachedAccessToken" value="@{{context.Variables[''cachedAccessToken'']}}" duration="@{{(new TimeSpan(0, (int)context.Variables[''tokenResponseJson''][''expires_in''], 0))}}" /> <cache-store-value key="tokenExpiry" value="@{{context.Variables[''tokenExpiry'']}}" duration="@{{(new TimeSpan(0, (int)context.Variables[''tokenResponseJson''][''expires_in''], 0))}}" /> </when> <otherwise> <cache-lookup-value key="cachedAccessToken" variable-name="cachedAccessToken" /> <cache-lookup-value key="tokenExpiry" variable-name="tokenExpiry" /> </otherwise> </choose> <set-header name="Authorization" exists-action="override"> <value>@{{$"Bearer {{context.Variables[''cachedAccessToken'']}}"}}</value> </set-header> </inbound> <backend> <base /> </backend> <outbound> <base /> </outbound> <on-error> <base /> </on-error> </policies> 这是由 devops 管道运行的二头肌: resource apim 'Microsoft.ApiManagement/service@2022-04-01-preview' existing = { name: apimName resource apiVersionSet 'api-version-sets@2018-06-01-preview' = if (enableApiVersioning) { name: apiName properties: { displayName: displayName versioningScheme: versionScheme versionHeaderName: 'X-Api-Version' versionQueryName: 'api-version' } } resource api 'apis' = { name: enableApiVersioning ? apiNameVersioned : apiName properties: { displayName: displayName path: '${pathPrefix}${apiName}' format: definitionFormat protocols: [ 'https' ] subscriptionRequired: true value: definition apiVersion: enableApiVersioning ? version : null apiVersionSetId: enableApiVersioning ? apiVersionSet.id : null subscriptionKeyParameterNames: { header: 'Ocp-Apim-Subscription-Key' query: 'subscription-key' } } resource apiPolicy 'policies' = if (!empty(policy)) { name: 'policy' properties: { value: policy } } } } 我收到以下错误: '=' 是一个意外的标记。预期的标记是“;”。 13 号线,位置 58. 经验教训 - 多注意 chatgpt 输出的内容! 主要问题是 C# 代码块的语法。这是工作方针: <policies> <inbound> <base /> <choose> <when condition="@(!context.Variables.ContainsKey("cachedAccessToken") || DateTime.UtcNow >= (DateTime)context.Variables["tokenExpiry"])"> <set-backend-service id="apim-generated-policy" backend-id="func-amx-api-dev-001" /> <send-request mode="new" response-variable-name="tokenResponse" timeout="20" ignore-error="false"> <set-url>{{baseurl}}.azurewebsites.net/token</set-url> <set-method>POST</set-method> <set-header name="Content-Type" exists-action="override"> <value>application/x-www-form-urlencoded</value> </set-header> <set-body>@("grant_type=password&username={{user}}&password={{AmxPassword}}")</set-body> </send-request> <set-variable name="cachedAccessToken" value="@((String)((IResponse)context.Variables["jwt"]).Body.As<JObject>()["access_token"])" /> <set-variable name="tokenExpiry" value="@((String)((IResponse)context.Variables["jwt"]).Body.As<JObject>()["expires_in"])" /> <cache-store-value key="cachedAccessToken" value="@((String)context.Variables["cachedAccessToken"])" duration="3600" caching-type="internal" /> <cache-store-value key="tokenExpiry" value="@((String)context.Variables["tokenExpiry"])" duration="3600" caching-type="internal" /> </when> <otherwise> <cache-lookup-value key="cachedAccessToken" variable-name="cachedAccessToken" /> <cache-lookup-value key="tokenExpiry" variable-name="tokenExpiry" /> </otherwise> </choose> <set-header name="Authorization" exists-action="override"> <value>@{ return $"Bearer {(String)context.Variables["cachedAccessToken"]}"; }</value> </set-header> </inbound> <backend> <base /> </backend> <outbound> <base /> </outbound> <on-error> <base /> </on-error> </policies> 我还将策略移动到一个单独的文件,并使用以下二头肌在 apim 操作级别部署: resource apiPolicy 'Microsoft.ApiManagement/service/apis/operations/policies@2022-09-01-preview' = { name: '${apimName}/amxapi_v1_0_0/entity/policy' properties: { value: loadTextContent('./createEntityPolicy.xml') } }