首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在启用EasyAuth的情况下限制对access中托管标识(属于组)的访问

在启用EasyAuth的情况下限制对access中托管标识(属于组)的访问
EN

Stack Overflow用户
提问于 2020-03-20 15:50:06
回答 1查看 776关注 0票数 1

我有一个场景,在使用EasyAuth之前有几个APIM实例。每个APIM实例都有一个托管标识,该身份是组的成员。我正在寻找一种方法来限制API中对这个特定组的访问(或者至少是APIM的特定ObjectID )。

不编写代码(或使用IP限制)是否支持此方案?

我尝试过设置“用户分配所需的?”在我的AD应用程序( API和Azure函数)中,可以使用“将Azure应用程序限制为一组用户”的指导:https://learn.microsoft.com/en-us/azure/active-directory/develop/howto-restrict-your-app-to-a-set-of-users#update-the-app-to-enable-user-assignment。但是,我仍然可以从具有托管标识的APIM访问API,即使它没有在API中得到适当的分配。我原以为这个电话会以401失败。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-21 16:53:10

首先,您观察到了一种工作行为,因为您(a)显式地为托管标识分配了角色/访问easy应用程序注册;或者(b) APIM有一个缓存的令牌,从您启用轻松auth应用注册所需的显式分配之前开始。

一般来说,你的方法是正确的。但有一个警告。基于组的授权将不适用于任何服务主体(今天)。这意味着,如果您将一个服务主体(A)放入一个组(G),并将这个组分配给另一个服务主体(B)。第一个服务主体(A)仍然无法获得服务主体(B)的访问令牌。今天的任何服务主体(A)必须明确授权给另一个服务主体(B)。意思--如果设置为要求为服务主体指定显式用户分配,则必须显式分配任何其他要授予访问权限的服务主体。其他任何东西在获取访问令牌时都将失败。

下面是在干净的环境中实现所需的步骤:

  1. 创建函数应用程序
  2. 为函数应用程序启用Easy
  3. 更改该应用程序注册的服务主体(函数应用程序)上需要显式用户分配的设置。
  4. 不要在函数应用程序的服务主体上分配任何角色。
  5. 在APIM上启用托管标识
  6. 使用策略中的托管标识,通过引用application_id为函数应用程序轻松注册
  7. 测试APIM

在函数应用程序上指定任何角色之前的结果:

代码语言:javascript
复制
HTTP 500 ERROR:
 AADSTS501051: Application 'xxx'(easy-apim) is not assigned to a role for the application 'yyy'(easyprotected-fn)

详细错误:

代码语言:javascript
复制
Getting Managed Service Identity token for xxx-xxx-xxx audience threw exception 'System.InvalidOperationException: 
Authentication failed for Active Directory Tenant: 'https://login.windows.net/yyy-aaa-bbb' 
---> Microsoft.IdentityModel.Clients.ActiveDirectory.AdalServiceException: 
AADSTS501051: Application 'yyy'(easy-apim) is not assigned to a role for the application 'bb'(easyprotected-fn).

现在,要让托管标识通过,您必须为您的服务主体创建一个应用程序角色(受保护的API --您将其更改为显式要求用户分配的API)。遵循指南这里并为允许的成员类型选择“应用程序”。例如:

代码语言:javascript
复制
  {
      "allowedMemberTypes": [
        "Application"
      ],
      "displayName": "GrantAccessToAPIM",
      "id": "aaaaaa-bbbb-cccc-dddd-feb89e6f5d47",
      "isEnabled": true,
      "description": "Used to explicitly gelegate access for APIM",
      "value": "GrantAccessToAPIM"
    }

然后,您需要显式地将您的托管标识分配给这个角色!您可以通过使用新-AzureADServiceAppRoleAssignment cmdlet来实现这一点。

一旦将托管标识分配给受保护的应用程序,您将在APIM中看到成功调用:

身份验证-管理-标识(1.244毫秒)

代码语言:javascript
复制
{
    "message": "Obtaining managed identity token using clientId:xxx AAD Authority:https://login.windows.net/yyy for https://fndemo-test.azurewebsites.net audience succeeded.",
    "errorResponse": null
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60777419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档