oauth-2.0 - 使用 Azure AD 通过 OAuth2 对 Azure API 管理进行身份验证
问题描述
我正在尝试通过阅读文章通过 AzureAD 使用 OAuth2 保护 APIM API:通过使用 Azure AD 的 OAuth 2.0 授权来保护 Azure API 管理中的 Web API 后端
AzureAPIM - OAuth2
- 授权端点 URL (v1):https ://login.microsoftonline.com/{tenant}/oauth2/authorize
- 令牌端点 URL (v1):https ://login.microsoftonline.com/{tenant}/oauth2/token
- 客户端 ID:客户端应用程序 ID
- 重定向 URI:(不推荐使用的门户):https ://xxx-api.portal.azure-api.net/docs/services/auth1/console/oauth2/authorizationcode/callback
AzureAD - 后端应用程序:
- 范围:Files.All
AzureAD - 客户端应用程序:
- 秘钥:xxx
- 重定向网址:仅适用于 APIM 中已弃用的门户(https://xxx-api.portal.azure-api.net/docs/services/auth1/console/oauth2/authorizationcode/callback)
对于演示会议 API,将验证 JWT 策略添加到入站处理,其中3a0cf09b-
租户 IDb7c31179-
是后端应用程序 ID:
在开发人员门户中,对 AzureAD 的身份验证成功并带有返回令牌:
检查 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
以使其正常工作。
请问有什么想法吗?
解决方案
从你的报错来看,确实是401错误,也就是你aud
的和你要调用的api不匹配,我用auth代码流程给你做个简单的演示:
首先暴露后端应用的api,添加客户端应用。
接下来,在“API 权限”下,让您的前端应用程序访问您的后端 API:
- 在“API 权限”下单击“添加权限”,然后单击“我的 API”选项卡。
- 找到您的后端应用程序并选择适当的范围。
- 单击“添加权限”。
- 为您的 API 授予管理员许可。
获取令牌:
解析token:</p>
推荐阅读
- azure-devops - 来自 Azure DevOps 的 client_credentials oauth2 令牌
- java - 为什么我收到此错误“FirebaseRecyclerAdapter 中的 FirebaseRecyclerAdapter() 无法应用于:”
- css - 我可以将正文与边注对齐吗?
- python - 根据前后行中的值填充缺失值
- python-3.x - 关于 pygame 模块的简单 SublimeText 问题
- javascript - React Hooks 有条件地渲染登录/注销 w/本地存储变量
- c# - 我应该在循环阅读器之前关闭 SQL 连接吗?
- javascript - 谷歌标签管理器:解析错误。',' 预期的
- solidity - Solidity 中的修饰符和访问值
- javascript - 如何过滤一个 JS 对象并按日期排序?