首页 > 解决方案 > 使用 Azure AD 通过 OAuth2 对 Azure API 管理进行身份验证

问题描述

我正在尝试通过阅读文章通过 AzureAD 使用 OAuth2 保护 APIM API:通过使用 Azure AD 的 OAuth 2.0 授权来保护 Azure API 管理中的 Web API 后端

AzureAPIM - OAuth2

AzureAD - 后端应用程序:

AzureAD - 客户端应用程序:

对于演示会议 API,将验证 JWT 策略添加到入站处理,其中3a0cf09b-租户 IDb7c31179-是后端应用程序 ID: 在此处输入图像描述

在开发人员门户中,对 AzureAD 的身份验证成功并带有返回令牌: 在此处输入图像描述

但是调用 API 授权失败: 在此处输入图像描述

检查 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",
}

API 测试 HTTP 响应跟踪显示 validate-jwt 上的错误:

validate-jwt (-0.138 ms)
{
    "message": "JWT Validation Failed: Claim value mismatch: aud=b7c31179-xxx.."
}

替换aud为令牌中的值00000003-0000-0000-c000-000000000000或删除策略required-claims中的值validate-jwt以使其正常工作。

请问有什么想法吗?

标签: oauth-2.0azure-active-directoryazure-api-management

解决方案


从你的报错来看,确实是401错误,也就是你aud的和你要调用的api不匹配,我用auth代码流程给你做个简单的演示:

首先暴露后端应用的api,添加客户端应用。

在此处输入图像描述

接下来,在“API 权限”下,让您的前端应用程序访问您的后端 API:

  • 在“API 权限”下单击“添加权限”,然后单击“我的 API”选项卡。
  • 找到您的后端应用程序并选择适当的范围。
  • 单击“添加权限”。
  • 为您的 API 授予管理员许可。

在此处输入图像描述

获取令牌:

在此处输入图像描述

解析token:</p>

在此处输入图像描述


推荐阅读