繁体   English   中英

在 azure api 管理中使用 authentication-managed-identity 标签时不完整的 bearer token

[英]Incomplete bearer token when using authentication-managed-identity tag in azure api management

我一直在尝试通过 API azure API Management 公开一个 API,但我不知道自己做错了什么。 情况是这样的:

  • 我的 API 将被外部应用程序调用

  • 他们在同一租户中没有 Azure 帐户

  • 我想通过使用订阅密钥为我的 API 启用外部呼叫(因此,为什么我使用 API 管理),但也想用 Azure AD 保护我的实际 API。

  • 我有一个 API,它使用 OAuth2 由 Azure AD 保护并发布到 Windows AppService

  • 我有一个 API 的应用程序注册,我用它来进行身份验证(例如,它从 postman 开始工作)应用程序注册

  • 我已打开托管标识并设置了权限。

  • 我在API管理中添加了API

  • 我添加了authentication-managed-identity入站规则,使用应用程序注册的 API Id Uri 作为它的资源值。 Api 管理配置

  • 从 APIM 接口测试端点时,我可以成功获取承载令牌,但我从 API 收到 500 异常,它表示:在承载令牌承载响应中找不到 scope 或角色声明

  • 这是解码的承载令牌,它没有解码的 scp 属性承载

我不确定在哪里可以指定 scope。如果我使用完整的 scope uri (api://guid/access.api.management),它会在尝试获取不记名令牌时失败(名为 api 的资源主体:/ /guid/access.api.management 在租户中找不到)。 我什至尝试过将 Owner 角色添加到 AppService 的 APIM Identity。

也许我没有正确使用它,我在使用 Azure 云和 API 管理方面还很陌生,所以欢迎提出任何建议。 谢谢。

您公开了一个受 Azure 保护的 api,目前您有一个api 应用程序 接下来,您需要创建另一个代表客户端的应用程序,然后将客户端应用程序添加到 api 应用程序中。

在此处输入图像描述

接下来,go给客户端申请

  • 在“API 权限”下单击“添加权限”,然后单击“我的 API ”选项卡。
  • 找到您的 api 应用程序和 select 相应的 scope。
  • 单击“添加权限”。
  • 为您的 API 授予管理员许可。

在此处输入图像描述

接下来需要使用auth code flow获取access token,需要先登录用户获取授权码,然后使用授权码兑换access token。

1.在浏览器中请求授权码。

https://login.microsoftonline.com/{tenant id}/oauth2/v2.0/authorize?
client_id={client app client id}
&response_type=code
&redirect_uri={redirect_uri}
&response_mode=query
&scope=api://{api app client id}/{scope name}
&state=12345

2.兑换代币。

在此处输入图像描述

解析令牌:

在此处输入图像描述

我设法使用客户端凭据流并将客户端机密存储在密钥保管库中使其正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM