我必须在我的项目中使用第三方授权服务器实施 OAuth 2.0。我的客户端和服务器都已经在AS上注册了。我已在 Azure 上创建了一个 API 管理实例并导入了 swagger API。我希望每个传入请求都针对我的 AS 进行验证,因此我只需将请求重定向到https://my-as.com/as/introspect.oauth2,并验证令牌。如果令牌有效,则让它继续,否则发送 401。我试图使用“入站处理”来实现此目的,并参考以下文档: https: //learn.microsoft.com/en-us/azure/api-管理/api-management-howto-protect-backend-with-aad#configure-a-jwt-validation-policy-to-pre-authorize-requests。
唯一的问题是我使用的是第三方 AS,而不是 Azure AD。我尝试用我的 URL 替换示例 XML 代码中的 URL,但它不起作用。
如何将请求重定向到授权服务器以验证访问令牌?
authorization azure oauth-2.0 azure-active-directory azure-api-management
在 Azure APIM 中,我试图创建一个将验证 JWT 的策略。无论我尝试什么,我总是收到“401:无效的 JWT”错误。有谁知道我做错了什么?(也许我没有使用正确的签名密钥?)
我的 base64 编码安全密钥是Zm9v.
我在 jwt.io 创建示例令牌,所以我的授权标头是:
Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.Bm8tu4m18oA96xwhBL8AV_4hRpIU6OrK5UaOmGqBEsk
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的政策:
<policies>
<inbound>
<base />
<validate-jwt
header-name="Authorization"
require-expiration-time="false"
require-scheme="Bearer"
>
<issuer-signing-keys>
<key>Zm9v</key>
</issuer-signing-keys>
</validate-jwt>
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
<on-error>
<base />
</on-error>
</policies>
Run Code Online (Sandbox Code Playgroud)
HTTP响应:
cache-control: private
content-length: 48
content-type: application/json
ocp-apim-trace-location: https://xxxxxxx
vary: Origin
{
"statusCode": 401,
"message": "Invalid JWT."
}
Run Code Online (Sandbox Code Playgroud) 我正在使用以下代码
<validate-content unspecified-content-type-action="prevent" max-size="102400" size-exceeded-action="prevent" errors-variable-name="requestBodyValidation">
<content type="application/json" validate-as="json" action="ignore" />
</validate-content>
Run Code Online (Sandbox Code Playgroud)
在 api 管理策略中,但是当我发送带有 Content-Type 的请求时,application/json出现错误Unspecified content type application/json is not allowed
不确定问题所在,或者我对政策的理解错误。
有什么建议或解决方案吗?
我试图列出与工作项关联的所有拉取请求,但根据工作项 API,似乎没有办法获取它:
GET https://dev.azure.com/{org}/{project}/_apis/build/builds/123456/workitems?api-version=6.0
Run Code Online (Sandbox Code Playgroud)
上面返回工作项列表,例如:
{
"count": 40,
"value": [
{
"id": "156267",
"url": "https://dev.azure.com/xxx/_apis/wit/workItems/12345"
},
...
]
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我仍然决定查询每个返回的工作项,我仍然看不到拉取请求。例如:
GET https://dev.azure.com/xxx/_apis/wit/workItems/12345
Run Code Online (Sandbox Code Playgroud)
上面返回一个关于对工作项进行的更新的 JSON 对象,但这可以是提交、状态更新或注释。
有没有办法获取每个工作项目的 PR 列表?
谢谢
azure-api-management azure-api-apps azure-devops azure-devops-rest-api
我已经通过 Terraform 部署了 Azure HTTP 函数应用程序,我想通过 API 管理来管理对 HTTP 函数的访问。我可以看到如何通过 Terraform 创建 API 管理,但是我看不到如何将我的函数应用程序与 API 管理结合起来。通过控制台,这非常简单。我如何通过 terraform 做到这一点?