bee*_*est 5 oauth-2.0 azure-active-directory azure-api-management
我正在尝试通过 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/",
"app_displayname": "client-app",
"appid": "05a245fb-xxx",
"scp": "Files.Read User.Read profile openid email",
"tenant_region_scope": "OC",
"tid": "3a0cf09b-2952-4673-9ace-0e1bf69ee23a",
"unique_name": "user1@xxx.onmicrosoft.com",
}
Run Code Online (Sandbox Code Playgroud)
API 测试 HTTP 响应跟踪显示 validate-jwt 上的错误:
validate-jwt (-0.138 ms)
{
"message": "JWT Validation Failed: Claim value mismatch: aud=b7c31179-xxx.."
}
Run Code Online (Sandbox Code Playgroud)
替换aud为令牌中的值00000003-0000-0000-c000-000000000000或删除策略required-claims中的值validate-jwt以使其正常工作。
有什么想法吗?
看来您选择了 OAuth2 授权的 v1 端点,但没有选择 v2 端点,因此aud访问令牌中的值应该类似于b7c31179-xxxx....但不是api://b7c31179-xxxx....。所以你获取访问令牌的步骤没有错误。
根据我这边的一些测试,这个问题的原因是你resource在APIM中配置OAuth2.0时没有指定带有backend-app应用程序id值的参数。您引用的
文档也提到了这一点(我测试时未指定此参数,它显示与您相同的问题)
因此,要解决此问题,请转到您的 APIM 并单击“ OAuth 2.0 ”选项卡,编辑您创建的项目。resource添加具有后端应用程序应用程序 ID 值的
参数。
注意:当您添加参数resource并单击“保存”按钮时,请再次打开该项目并检查“客户端密码”框是否为空。当我在我这边测试时,添加参数后“客户端密钥”框显示为空resource,这可能是该页面上的错误。如果“客户端密钥”为空,它可能会显示错误消息,就像The request body must contain the following parameter: 'client_assertion' or 'client_secret'您在开发者门户中获取访问令牌时一样。
| 归档时间: |
|
| 查看次数: |
11474 次 |
| 最近记录: |