使用 Azure AD 通过 OAuth2 对 Azure API 管理进行身份验证

2024-05-18

我正在尝试通过 AzureAD 使用 OAuth2 来保护 APIM API,方法是阅读以下文章:通过 Azure AD 使用 OAuth 2.0 授权来保护 Azure API 管理中的 Web API 后端 https://learn.microsoft.com/en-us/azure/api-management/api-management-howto-protect-backend-with-aad

Azure APIM - OAuth2

  • 授权端点 URL (v1):https://login.microsoftonline.com/{tenant}/oauth2/authorize https://login.microsoftonline.com/%7Btenant%7D/oauth2/authorize
  • 令牌端点 URL (v1):https://login.microsoftonline.com/{tenant}/oauth2/token https://login.microsoftonline.com/%7Btenant%7D/oauth2/token
  • 客户端 ID:客户端应用程序 ID
  • 重定向 URI:(已弃用的门户):https://xxx-api.portal.azure-api.net/docs/services/auth1/console/oauth2/authorizationcode/callback https://xxx-api.portal.azure-api.net/docs/services/auth1/console/oauth2/authorizationcode/callback

AzureAD - 后端应用程序:

  • 范围:文件.全部

AzureAD - 客户端应用程序:

  • 密钥:xxx
  • 重定向 url:仅适用于 APIM 中已弃用的门户(https://xxx-api.portal.azure-api.net/docs/services/auth1/console/oauth2/authorizationcode/callback https://xxx-api.portal.azure-api.net/docs/services/auth1/console/oauth2/authorizationcode/callback)

For Demo Conference API, Add Validate JWT policy to Inbound processing where 3a0cf09b- is tenant id and b7c31179- is backend-app application id: enter image description here

In Developer portal, the authentication to AzureAD is successful with a return token: enter image description here

However the authorization is failed with calling the API: enter image description here

检查 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": "[email protected] /cdn-cgi/l/email-protection",
}

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 in the validate-jwt使其发挥作用的政策。

有什么想法吗?


从你的错误报告来看,确实是401错误,也就是你的aud与你要调用的api不匹配,我使用的是授权码流程 https://learn.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-auth-code-flow给大家做一个简单的演示:

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

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

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

获取代币:

解析token:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Azure AD 通过 OAuth2 对 Azure API 管理进行身份验证 的相关文章

随机推荐

  • 以编程方式更改 Redux-Form 字段值

    当我使用redux formv7 我发现没有办法设置字段值 现在在我的form 我有两个select成分 当第一个时 第二个的值就会很清楚select元件值改变 在类渲染中 div div site div div div div
  • 如何从此 AWS SecretsManager JSON 对象中提取字段?

    我正在使用 AWS Secrets Manager 来保护 REST API 的数据库信用 我正在使用 AWS Lambda API 网关和 RDS MySQL 以下是我如何获得它们 Load the AWS SDK var AWS req
  • 在 .Net 中保持 Powershell 运行空间打开

    我正在尝试从 VB Net 中运行一些 PowerShell 代码 如果您知道的话 C 编码器也可能会有所帮助 代码的第一部分 我需要使用密码连接到 na 控制器 并且需要保持连接打开 我还有其他命令需要通过单击按钮来运行 获取文件 显示文
  • 卡桑德拉身份验证问题

    卡桑德拉版本 apache cassandra 2 1 8 我最近配置了 2 节点集群Authenticator设置PasswordAuthenticator 当其中一个节点关闭时 我无法登录 Cqlsh 并出现以下错误 Connectio
  • 如何禁用 CRM 2011 Xrm 缓存?

    我的 crm 2011 缓存有问题 我不需要它 但我不知道如何禁用它 首先我生成这个 CrmSvcUtil exe codeCustomization Microsoft Xrm Client CodeGeneration CodeCust
  • 如何在 Azure 中仅部署辅助角色/Web 角色

    如果您在 Azure 解决方案中拥有 Web 和辅助角色 那么所有等待发布更新包 上传到云存储 等待包部署的过程可能会让人筋疲力尽 浪费大量时间 如何仅上传 部署包含这两个角色的 Microsoft Azure 解决方案的辅助角色或 Web
  • VB - 以隐式方式链接 DLL

    我正在开发 VB6 图形界面 并且需要隐式链接到 DLL 这样做的动机来自于我上一个问题 https stackoverflow com questions 5194573 有问题的 DLL 使用静态 TLS declspec thread
  • ios7 navigationController PushViewController 动画错误

    看来我在 navigationController PushViewController 方法中发现了一个错误 为了重新创建它 我采用了示例主详细信息项目并对 didSelectRow method void tableView UITab
  • 为什么 ZipList 不是 List 的默认应用实例

    我目前正在学习 Haskell 中的应用程序 如果我没记错的话 列表有两个不同的应用实例 List and ZipList 第二个被定义为包装列表值的新类型 这ZipList应用实例对我来说似乎更直观 这可能是一个愚蠢的问题 但有具体原因吗
  • 如何在 C# 中为命名空间指定别名

    我有一个很大的命名空间 Foo Bar Space Station Bar 我的别名是更短的东西 比如 Station 我该如何在使用部分做到这一点 使用 Foo Bar Space Station Bar 对象 所以我可以这样做 Stat
  • T4 模板在某些 PC 上生成额外的新行

    在将 T4 类用于实体框架时 有一些开发人员生成类 并为生成的每一行添加一个额外的新行 我想知道这是否是某种需要更改的设置 以便他们的 T4 生成的文件看起来像其他开发人员生成的文件 作为我正在谈论的示例 删除了特定名称 但您应该能够看到从
  • 为什么内核需要虚拟寻址?

    在Linux中 每个进程都有其虚拟地址空间 例如 32位系统为4GB 其中3GB为进程保留 1GB为内核保留 这种虚拟寻址机制有助于隔离每个进程的地址空间 对于流程来说这是可以理解的 因为有很多流程 但既然我们只有 1 个内核 那么为什么我
  • Python `print` 将额外文本传递给 sys.stdout?

    这可能是我错过的一些愚蠢的事情 但它确实让我挂在了一个更大的项目上 c扩展 我正在写的 Why is print Hello World 通过None和一个额外的 n to sys stdout here gt gt gt import s
  • 如何从维基数据属性中获取最新值?

    假设我想获取每个国家 Q6256 及其最近记录的人类发展指数 P1081 值的列表 该国家 地区的人类发展指数属性包含在不同时间点获取的数据点列表 但我只关心最新的数据 此查询不起作用 因为它会为每个国家 地区获取多个结果 每个人类发展指数
  • git 日志历史记录图,每次提交一行,彩色,带有日期

    我需要的格式如下 git log decorate graph oneline date order 但我也需要它 包含日期 短 具有相同的颜色 I tried git log decorate graph oneline date ord
  • clang 是否提供类似于 GCC 6.x 的函数多版本控制 (target_clones) 的功能?

    我读了这篇 LWN 文章 https lwn net Articles 691932 饶有兴趣 执行摘要 GCC 6 x 支持所谓的函数多版本控制 它可以构建同一函数的多个版本 并针对不同的指令集进行优化 假设您有一台支持 AVX2 的机器
  • 使用 Denon 时如何避免权限问题

    我正在运行 denon 它就像节点中的 nodemon 但即使我手动指定了相关标志 特别是 allow net flag 如何使用 Denon 运行我的应用程序 这样我就不必不断重新启动 如果不知道确切的错误 很难给你正确的答案 但是den
  • PHP - 扩展 __construct

    我想知道你是否可以帮助我 我有两个类 一个扩展了另一个 B 类将由各种不同的对象扩展 并用于常见的数据库交互 现在我希望 B 类能够处理其连接和断开连接 而无需来自 A 类或任何外部输入的指示 据我了解 问题是扩展类不会自动运行其 cons
  • 找出所有程序 dynpro 屏幕?

    我是ABAP新手 我想制作一个具有多个屏幕和一个初始主屏幕的程序 可以在其中看到所有程序屏幕的列表 我知道我可以对它们进行硬编码 但应该有更好的方法 如果有任何类型的字段 区域 我需要使该列表可点击 以转到屏幕 到目前为止 我已经制作了一个
  • 使用 Azure AD 通过 OAuth2 对 Azure API 管理进行身份验证

    我正在尝试通过 AzureAD 使用 OAuth2 来保护 APIM API 方法是阅读以下文章 通过 Azure AD 使用 OAuth 2 0 授权来保护 Azure API 管理中的 Web API 后端 https learn mi