我已经拿起了别人设置的东西。我们有一个 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) 每当我尝试测试 API(使用 API 刀片的“测试”选项卡)时,我都会得到
Could not complete the request. Please try again later.
我的 API 管理服务上已经发生这种情况至少两个小时了。我创建了一个额外的 API 管理服务和另一个订阅(带有自己的 APIM)。
我处于消费层(SLA 为 99.9%),Azure 状态页面全面显示绿色。我自己的个人仪表板(服务运行状况)正在显示No service issues found。
这让我认为这是我所做的事情。
我该如何着手调查此事?
我正在 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 对象,我想将其附加到响应中(小细节:实际上我遇到了多个变量的问题)。
我的问题是:如何将声明的变量添加到响应中?
我刚刚发现我刚刚运行的报告中列出了一些弱密码:
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_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
我正在使用 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 Functions 导入到 API 管理,那么当 Azure Functions 发生更改时,我们如何使 API 保持最新状态?例如,如果函数签名发生更改或者添加或删除函数。如何实现此过程自动化,以便一旦 Azure Functions 发生更改,这些更改就会反映在 API 中?
Microsoft 的 API 管理团队在这里提出了一个解决方案,但我不清楚如何将该解决方案与 Azure Function App 作为 API 的后端一起应用。
仅当我通过 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) 我正在尝试通过 AzureAD 使用 OAuth2 来保护 APIM API,方法是阅读以下文章:通过使用 Azure AD 的 OAuth 2.0 授权保护 Azure API 管理中的 Web API 后端
AzureAPIM - OAuth2
AzureAD - 后端应用程序:
AzureAD - 客户端应用程序:
对于演示会议 API,将验证 JWT 策略添加到入站处理,其中3a0cf09b-是租户 id,b7c31179-是后端应用程序应用程序 id:

检查 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) 我尝试在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
您好,我已经搜索了文档,但找不到如何通过 terraform 发布开发人员门户。我的 terraform 确实使用 API 管理服务资源来假脱机资源组,但我希望它也发布开发人员门户并启用 CORS。这可以通过 terraform 实现吗?还是必须在 rg 假脱机后手动完成?
更新了 terraform,查看此处的文档:https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/api_management#host_name
开发者门户有一个块,但我不确定这是否真的发布了它,也不确定在主机名中放入什么。请协助。
azure ×7
azure-devops ×2
cors ×1
oauth-2.0 ×1
openapi ×1
policies ×1
powershell ×1
ssl ×1
terraform ×1