在 Azure api 管理中使用身份验证管理身份标记时持有者令牌不完整
Incomplete bearer token when using authentication-managed-identity tag in azure api management
我一直试图通过 azure API 管理公开一个 API,但我不知道我做错了什么。情况是这样的:
我的 API 将从外部应用程序调用
他们在同一租户中没有 Azure 帐户
我想通过订阅密钥为我的 API 启用外部调用(因此,我使用 API 管理的原因),但也想保留我的实际 API 使用 Azure AD 进行保护。
我有一个 API,它使用 OAuth2 通过 Azure AD 进行保护并发布到 Windows AppService
我有一个 API 的应用程序注册,我用它来进行身份验证(例如,它适用于邮递员)
app registration
我已启用托管身份并设置了权限。
我在API管理中添加了API
我添加了 authentication-managed-identity 入站规则,使用应用程序注册的 API Id Uri 作为它的资源值.
Api Management Config
从 APIM 接口测试端点时,我可以成功获取不记名令牌,但我从 API 收到 500 异常,它说:在不记名令牌中找不到范围或角色声明
bearer response
这是解码后的承载令牌,它没有 scp 属性
bearer decoded
我不确定在哪里可以指定范围。如果我使用完整范围的 uri (api://guid/access.api.management),它将在尝试获取不记名令牌时失败(名为 api 的资源主体://guid/access.api.management 未在租户中找到)。
我什至尝试将 Owner 角色添加到 AppService 的 APIM Identity。
也许我没有正确使用它,我在使用 Azure 云和 API 管理方面还很陌生,所以欢迎提出任何建议。
谢谢。
您公开了受 Azure 保护的 api,目前您有一个 api 应用程序。接下来,您需要创建另一个代表客户端的应用程序,然后将客户端应用程序添加到api应用程序
接下来,转到客户端应用程序。
- 在 'API permissions' 下单击 'Add permission',然后单击“我的 API”选项卡。
- 找到您的 api 应用程序和 select 合适的范围。
- 点击'Add permissions'。
- 为您的 API 授予管理员许可。
接下来,您需要使用auth code flow获取访问令牌,这需要您登录用户并获取授权码,然后使用授权码兑换访问令牌。
1.Request浏览器中的授权码。
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.Redeem令牌。
解析token:
我设法使用客户端凭据流并将客户端机密存储在密钥保管库中使其正常工作。
我一直试图通过 azure API 管理公开一个 API,但我不知道我做错了什么。情况是这样的:
我的 API 将从外部应用程序调用
他们在同一租户中没有 Azure 帐户
我想通过订阅密钥为我的 API 启用外部调用(因此,我使用 API 管理的原因),但也想保留我的实际 API 使用 Azure AD 进行保护。
我有一个 API,它使用 OAuth2 通过 Azure AD 进行保护并发布到 Windows AppService
我有一个 API 的应用程序注册,我用它来进行身份验证(例如,它适用于邮递员) app registration
我已启用托管身份并设置了权限。
我在API管理中添加了API
我添加了 authentication-managed-identity 入站规则,使用应用程序注册的 API Id Uri 作为它的资源值. Api Management Config
从 APIM 接口测试端点时,我可以成功获取不记名令牌,但我从 API 收到 500 异常,它说:在不记名令牌中找不到范围或角色声明 bearer response
这是解码后的承载令牌,它没有 scp 属性 bearer decoded
我不确定在哪里可以指定范围。如果我使用完整范围的 uri (api://guid/access.api.management),它将在尝试获取不记名令牌时失败(名为 api 的资源主体://guid/access.api.management 未在租户中找到)。 我什至尝试将 Owner 角色添加到 AppService 的 APIM Identity。
也许我没有正确使用它,我在使用 Azure 云和 API 管理方面还很陌生,所以欢迎提出任何建议。 谢谢。
您公开了受 Azure 保护的 api,目前您有一个 api 应用程序。接下来,您需要创建另一个代表客户端的应用程序,然后将客户端应用程序添加到api应用程序
接下来,转到客户端应用程序。
- 在 'API permissions' 下单击 'Add permission',然后单击“我的 API”选项卡。
- 找到您的 api 应用程序和 select 合适的范围。
- 点击'Add permissions'。
- 为您的 API 授予管理员许可。
接下来,您需要使用auth code flow获取访问令牌,这需要您登录用户并获取授权码,然后使用授权码兑换访问令牌。
1.Request浏览器中的授权码。
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.Redeem令牌。
解析token:
我设法使用客户端凭据流并将客户端机密存储在密钥保管库中使其正常工作。