oauth-2.0 Microsoft Azure OAuth客户端凭据令牌收到“授权失败”响应

hs1rzwqc  于 2022-10-31  发布在  其他
关注(0)|答案(1)|浏览(234)

我想通过休息API创建APIM订阅,并能够按照这个微软文档成功地做到这一点,https://learn.microsoft.com/en-us/rest/api/apimanagement/current-ga/subscription.
对于身份验证,我使用ROPC授权类型(我的用户名和密码)生成一个不记名令牌。
但是我不想在应用程序中配置我的用户名和密码来获得不记名令牌,相反,我遵循了客户端凭据授权类型(通过客户端ID和密码获取令牌),我可以生成令牌,但当我使用该令牌在APIM中创建订阅时,我收到例外状况对象识别码为'0***-***-e'的客户端'0-*e'没有执行'Microsoft.ApiManagement/service/subscriptions/write'动作的受权
是否可以在APIM AccessControl(IAM)中添加AAD应用程序来授予权限?或者是否有其他方法可以实现此目的?或者ROPC是唯一的方法?
有人能帮忙吗。

mw3dktmi

mw3dktmi1#

是的,您可以通过为AAD应用程序(服务主体)分配**API Management Service Contributor**角色,在APIM访问控制(IAM)中向其授予权限。

我尝试在我的环境中重现相同的结果,并得到以下结果:

我已经使用Client-Credentials授权类型生成了一个访问令牌,如下所示:

当我使用上面的令牌创建APIM订阅并进行下面的查询时,我得到了相同的错误:

PUT https://management.azure.com/subscriptions/subid/resourceGroups/rg1/providers/Microsoft.ApiManagement/service/apimService1/subscriptions/testsub?api-version=2021-12-01

{
  "properties": {
    "ownerId": "/subscriptions/subid/resourceGroups/rgname/providers/Microsoft.ApiManagement/service/servicename/users/xxxxxxxxxxx",
    "scope": "/subscriptions/subid/resourceGroups/rgname/providers/Microsoft.ApiManagement/service/servicename/products/xxxxxxxxxxx",
    "displayName": "testsub"
  }
}

回应:

要解决此错误,您需要为该应用程序授予**API Management Service Contributor**角色,如下所示:

  • 转到Azure门户-〉APIM服务-〉您的APIM -〉访问控制(IAM)-〉添加角色分配 *

在授予上述角色之后,我再次生成访问令牌并运行相同的查询,如下所示:

PUT https://management.azure.com/subscriptions/subid/resourceGroups/rg1/providers/Microsoft.ApiManagement/service/apimService1/subscriptions/testsub?api-version=2021-12-01

回应:

当我检查门户时,APIM subscription已成功创建,如下所示:

x1c4d 1x指令集

参考:

如何在Azure API管理中使用基于角色的访问控制|Microsoft文档

相关问题