Azure API Management是一种云托管服务,可以在任何平台上为现有HTTP API添加许多功能。这包括与安全性,API密钥管理,缓存,文档和许多其他交叉策略相关的功能。有关详细信息,请参阅:http://azure.microsoft.com/apim
Azure APIM 策略中的 Newtonsoft.Json 转换
在 Azure APIM 策略中 - 响应可以作为 Json 对象或 Json 数组返回 - 但也可以是其中之一,并且这两种情况都需要处理。 这仅在响应时才有效...
目前在 APIM 中,我们有产品订阅密钥级别限制。但显然,如果我们在同一产品中有多个 API,则一个 API 可能会消耗更多配额 超出预期并防止其他...
我想在其中一个 api 中应用此策略,以将其收到的令牌重定向到 api https://obw.stdn.com.pe/api/mf/v3/ami/authorize 我想在其中一个 api 中应用此策略,以将其收到的令牌重定向到 api https://obw.stdn.com.pe/api/mf/v3/ami/authorize <policies> <inbound> <validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized. Access token is missing or invalid."> <openid-config url="https://uatidpbsp.b2clogin.com/uatidpbsp.onmicrosoft.com/B2C_1A_LOGIN_OOBB/v2.0/.well-known/openid-configuration" /> <audiences> <audience>01c396bf-e852-b396-d0a7e4d0d373</audience> <audience>c2ef0c9f-98f1-920e-44fb99c98026</audience> </audiences> <issuers> <issuer>https://uatidpbsp.b2clogin.com/a359g4c43-4228-563k5-89b6/v2.0/</issuer> </issuers> </validate-jwt> <!-- Send the request to the external endpoint with the token --> <send-request mode="new"> <set-url>https://obw.stdn.com.pe/api/mf/v3/ami/authorize</set-url> <set-method>POST</set-method> <set-header name="Authorization" exists-action="override"> <value>Bearer @(context.Request.Headers.GetValueOrDefault("Authorization", ""))</value> </set-header> <set-header name="Ocp-Apim-Subscription-Key" exists-action="override"> <value>e75ee8762a842htf96e36ba5f9z8c275</value> </set-header> <set-body> <value>{}</value> </set-body> </send-request> <base /> </inbound> <backend> <base /> </backend> <outbound> <base /> </outbound> <on-error> <base /> </on-error> </policies> 我收到以下错误: Some of the policy expressions may not have the correct parentheses or braces format. Please ensure that all policy expressions are in the correct format @() or @{}, in order to avoid any issues. 当我尝试保存策略时,出现语法错误。 发送请求策略需要进行两项修改: 需要响应变量 <send-request mode="new" response-variable-name="responseExternal"> 主体值的大括号必须被删除 <set-body><value /></set-body> 完整政策: <policies> <inbound> <validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized. Access token is missing or invalid."> <openid-config url="https://uatidpbsp.b2clogin.com/uatidpbsp.onmicrosoft.com/B2C_1A_LOGIN_OOBB/v2.0/.well-known/openid-configuration" /> <audiences> <audience>01c396bf-e852-b396-d0a7e4d0d373</audience> <audience>c2ef0c9f-98f1-920e-44fb99c98026</audience> </audiences> <issuers> <issuer>https://uatidpbsp.b2clogin.com/a359g4c43-4228-563k5-89b6/v2.0/</issuer> </issuers> </validate-jwt> <!-- Send the request to the external endpoint with the token --> <send-request mode="new" response-variable-name="responseExternal"> <set-url>https://obw.stdn.com.pe/api/mf/v3/ami/authorize</set-url> <set-method>POST</set-method> <set-header name="Authorization" exists-action="override"> <value>Bearer @(context.Request.Headers.GetValueOrDefault("Authorization", ""))</value> </set-header> <set-header name="Ocp-Apim-Subscription-Key" exists-action="override"> <value>e75ee8762a842htf96e36ba5f9z8c275</value> </set-header> <set-body> <value /> </set-body> </send-request> <base /> </inbound> <backend> <base /> </backend> <outbound> <base /> </outbound> <on-error> <base /> </on-error> </policies>
我有一个 api,假设有 100 个操作。我已经创建了开发者门户。我的要求是 100 次操作,用户 A 只能查看 GET 操作,用户 B 只能查看 PUT 和 POST
我在api管理实例中创建了一个api。我正在尝试测试门户中的 api。我观察到以下错误消息。启用跟踪后,我发现了此错误消息。我可以知道我怎样才能...
如何在 Azure API 管理开发人员门户中删除使用本地用户帐户登录的选项?那不是在登录页面上显示选择/用户名 - 密码表单,并且在当前
同时发布带有 bicep set-body 和 set-backend-service 的 apim 策略
我有以下二头肌模块: // 如果 set-backend-service 和 set-body 一起使用会失败 // var apiOperationPolicy = format(''' // // // 我有以下二头肌模块: // fails if set-backend-service and set-body are used together // var apiOperationPolicy = format(''' // <policies> // <inbound> // <base /> // <rewrite-uri template="/" /> // <set-backend-service base-url="{0}" /> // <set-body> // <value>@{ // var body = context.Request.Body.As<JObject>(); // body["source"] = body["operation"]; // return body.ToString(); // }</value> // </set-body> // </inbound> // <backend> // <base /> // </backend> // <outbound> // <base /> // </outbound> // <on-error> // <base /> // </on-error> // </policies> // ''', formattedBasePath) //works if only set-body // var apiOperationPolicy = ''' // <policies> // <inbound> // <base /> // <rewrite-uri template="/" /> // <set-body> // <value>@{ // var body = context.Request.Body.As<JObject>(); // body["source"] = body["operation"]; // return body.ToString(); // }</value> // </set-body> // </inbound> // <backend> // <base /> // </backend> // <outbound> // <base /> // </outbound> // <on-error> // <base /> // </on-error> // </policies> // ''' //works if only set-backend-service is used var apiOperationPolicy = format(''' <policies> <inbound> <base /> <rewrite-uri template="/" /> <set-backend-service base-url="{0}" /> </inbound> <backend> <base /> </backend> <outbound> <base /> </outbound> <on-error> <base /> </on-error> </policies> ''', formattedBasePath) resource apiOperationPolicyResource 'Microsoft.ApiManagement/service/apis/operations/policies@2022-04-01-preview' = { parent: apiOperation name: 'policy' properties: { value: apiOperationPolicy format: 'rawxml' } } 如果我尝试设置这两个策略,则会收到以下错误: 错误:InvalidTemplate - 部署模板验证失败:“模板变量“apiOperationPolicy”无效:无法评估语言函数“格式”:格式无效:“输入字符串的格式不正确。” 有谁知道这是什么原因吗? 错误:InvalidTemplate - 部署模板验证失败:“模板变量“apiOperationPolicy”无效:无法评估语言函数“格式”:格式无效:“输入字符串的格式不正确。” 我之前在我的环境中尝试时也收到了同样的错误。我使用以下解决方法来解决该问题并按预期工作。 基本上,您使用的占位符的目的是。部署后,它将被格式化的基本路径 URL 替换。因此,不要使用 {0} 作为占位符,而是尝试使用名为 _base_url_ 的占位符来避免输入格式的冲突,因为当 bicep 读取 XML 的多行结构时,有可能出现解析错误。 通过 _base_url_ 后,使用策略中可用的 replace() 函数将占位符替换为存储在格式化基本路径中的实际 URL。 param formattedBasePath string = 'https://google.com' var apiOperationPolicy = ''' <policies> <inbound> <base /> <rewrite-uri template="/" /> <set-backend-service base-url="_base_url_" /> <set-body> <value>@{ var body = context.Request.Body.As<JObject>(); body["source"] = body["operation"]; return body.ToString(); }</value> </set-body> </inbound> <backend> <base /> </backend> <outbound> <base /> </outbound> <on-error> <base /> </on-error> </policies> ''' 使用replace()函数: var replacepolicy = replace(apiOperationPolicy, '_base_url_', formattedBasePath) resource apiManagementService 'Microsoft.ApiManagement/service@2023-05-01-preview' existing = { name: 'newapimjah' } resource api 'Microsoft.ApiManagement/service/apis@2020-12-01' existing = { parent: apiManagementService name:'apinewjah' } resource apiOperation 'Microsoft.ApiManagement/service/apis/operations@2023-09-01-preview' existing = { name: 'firstop' parent: api } resource apiOperationPolicyResource 'Microsoft.ApiManagement/service/apis/operations/policies@2022-04-01-preview' = { parent: apiOperation name: 'policy' properties: { value: replacepolicy format: 'rawxml' } } 部署成功:
我将介绍通过 Azure API 管理器公开 API 子集的方法以及如何保证安全。目的是让合作伙伴构建自己的连接到这些 API 的应用程序。 对...
仅使用 Azure AD Identity 时如何将用户添加到新的 Azure API 管理开发人员门户中的管理员组?
我正在运行一个 API 管理实例,用户可以仅使用 Azure AD 登录。有一个管理员帐户,但它使用旧的用户/密码身份。我无法删除...
我正在使用 Terraform 部署 Azure Api 管理。到目前为止,我能够创建服务、API、策略和操作,但没有一个模块可以在其中找到 json 格式的定义...
从 Microsoft Fabric 访问 Azure API 管理 - 处理 IP 限制
我正在尝试从 Microsoft Fabric(数据流)访问 Azure API 管理实例。 API 配置了 IP 限制来阻止传入请求。 当前设置: 我有 Azure API Mana...
我有一个Azure应用程序名称,我可以在图形Api的帮助下访问企业应用程序属性。 我想将下面的图形 Api 集成到我的 APIM 服务中以获取
如何通过 REST 链接公开 azure 托管 api openapi v3 yaml 文件
我无法公开从我的托管 API 下载开放 API v3 规范的链接。我看过这个博客说: 在 az 中导出 JSON 和 YAML 格式的 OpenAPI 规范 v3 文件...
我有一个包含 C# OData 查询和多个非 OData 查询的服务。我将其连接到我的 APIM,并且我想在 APIM 内为此创建 2 个 API: https:/// 我有一项服务,其中包含 C# OData 查询以及多个非 OData 查询。我将其连接到我的 APIM,并且我想在 APIM 内为此创建 2 个 API: https://<myurl>/<myservice>/odata => OData API https://<myurl>/<myservice>/xxxx => 手动 HTTP API,我将在其中定义所有其他操作 我正在尝试找出最好的方法来做到这一点,因为它们都指向相同的服务,并且都使用相同的基本 URL。 现在,我在 HTTP API 策略中拥有所有调用,但如果可能的话,我想将 OData 中的调用拆分出来 但如果可能的话,我想将 OData 拆分出来 通过 URL 重写创建两个独立的 API。 <!-- In the OData API policy --> <policies> <inbound> <base /> <rewrite-uri template="/odata/{*remainder}" /> <set-backend-service base-url="https://your-backend-service.com" /> </inbound> </policies> <!-- In the HTTP API policy --> <policies> <inbound> <base /> <rewrite-uri template="/api/{*remainder}" /> <set-backend-service base-url="https://your-backend-service.com" /> </inbound> </policies> 两个独立的 API 提供了更清晰的关注点分离,更容易管理不同的安全策略,并且 OData 与常规端点也有不同的速率限制 在策略中使用单个 API 和基于路径的路由 <policies> <inbound> <base /> <choose> <when condition="@(context.Request.OriginalUrl.Path.StartsWith("/odata"))"> <!-- OData specific policies --> <set-header name="Prefer" exists-action="override"> <value>odata.maxpagesize=50</value> </set-header> </when> <otherwise> <!-- Regular API specific policies --> </otherwise> </choose> <set-backend-service base-url="https://your-backend-service.com" /> </inbound> </policies> 具有路由功能的单一 API 可在需要时提供共享策略,并在单一位置管理常见设置 OData API 和常规 API 都可以指向相同的后端服务,但您可以更好地控制每个 API 的行为。
如何在 Application Insights 中记录 Azure APIM 用户
目标 确定谁正在从 Application Insights (AI) 访问 Azure APIM 中的哪些 API 终结点。 假设 用户 = 个人或后端 多个用户可能共享相同的订阅...
使用 Keyvault 证书部署用于 API 管理的主机名配置
我正在实现一个二头肌文件,用于使用自定义域部署 API 管理。与此自定义域相关的证书必须从密钥库中获取。 我已经设法让它工作了...
查看如何配置API管理的文档,表明可以创建一个入口控制器用于API管理和AKS之间的通信,这是否一定是强制性的...
从 Azure APIM 策略中的响应中删除不在顶层的属性和值
我有一个 Azure 策略,其内容类似于以下出站响应: { “菜单”:空, “身份证”:101193, “价值”: [ { ”
我目前在 Azure 中有一个应用程序服务,我可以向其添加访问限制,该服务仅允许来自 Microsoft 服务标记中定义的 IP 地址的请求(在本例中为