在启用了EasyAuth的App Services中限制对托管身份(属于组)的访问

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在启用了EasyAuth的App Services中限制对托管身份(属于组)的访问相关的知识,希望对你有一定的参考价值。

我在使用EasyAuth的App Service API前面有多个APIM实例。每个APIM实例都有一个作为组成员的受管身份。我正在寻找一种方法来限制对该特定组(或至少是APIM的特定ObjectID)的API访问。

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

我已尝试通过设置“是否需要用户分配?”遵循“将您的Azure AD应用程序限制为一组用户”中的指导,在我的AD应用程序(API和Azure函数)中为YES:https://docs.microsoft.com/en-us/azure/active-directory/develop/howto-restrict-your-app-to-a-set-of-users#update-the-app-to-enable-user-assignment。但是,即使我没有在API中进行适当的分配,我仍然可以从具有受管身份的APIM访问API。我原以为这次呼叫会失败并显示401。

答案

首先-您观察到一种工作行为,因为(a)您为托管身份明确分配了角色/对简单auth应用程序注册的访问权;或(b)从您启用轻松auth应用注册所需的显式分配之时起,APIM就有一个缓存的令牌。

通常,您的方法是正确的。一个警告。对于任何服务主体,基于组的授权(今天)将不起作用。这意味着,如果您将服务主体(A)放入组(G)中,并且将该组分配了角色给另一个服务主体(B)。第一个服务主体(A)仍将无法获取服务主体(B)的访问令牌。今天,任何服务主体(A)必须明确授权给另一个服务主体(B)。含义-如果您设置为要求对服务主体进行显式用户分配,则必须显式分配要授予访问权限的任何其他服务主体。其他任何事情都将无法获得访问令牌。

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

  1. 创建功能应用程序
  2. 为功能应用程序启用Easy Auth
  3. 更改设置以要求在该应用程序注册(功能应用程序)的服务主体上要求明确的用户分配
  4. 尚未在功能应用程序的服务主体上分配任何角色
  5. 在APIM上启用托管身份
  6. 通过参考application_id在策略中使用托管身份,以进行功能app easy auth注册
  7. 测试APIM

在功能应用程序上分配任何角色之前的结果:

HTTP 500 ERROR:
 AADSTS501051: Application 'xxx'(easy-apim) is not assigned to a role for the application 'yyy'(easyprotected-fn)

详细错误:

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)。请遵循here指南,并为允许的成员类型选择“应用程序”。例如:

  
      "allowedMemberTypes": [
        "Application"
      ],
      "displayName": "GrantAccessToAPIM",
      "id": "aaaaaa-bbbb-cccc-dddd-feb89e6f5d47",
      "isEnabled": true,
      "description": "Used to explicitly gelegate access for APIM",
      "value": "GrantAccessToAPIM"
    

然后,您需要为该角色显式分配托管身份!您可以使用New-AzureADServiceAppRoleAssignment cmdlet执行此操作。

一旦将托管身份分配给受保护应用程序一个角色,您将在APIM中看到成功调用:

身份验证管理的身份(1.244毫秒)


    "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

以上是关于在启用了EasyAuth的App Services中限制对托管身份(属于组)的访问的主要内容,如果未能解决你的问题,请参考以下文章

在 Google App Engine 柔性环境中启用 CORS

当客户端在 /.auth/login/aad 端点上发布访问令牌时,为啥 EasyAuth 返回 401 Unauthorized 状态?

在 Asp.Net Core Web 应用程序中使用 EasyAuth 对 Azure 应用服务上的 AAD 进行身份验证时,无法填充 ClaimsPrincipal

在不使用 Play Services API 的情况下启用位置/GPS 设置

多个 ng-app 中 Controllers & Services 之间的通信

azure 移动应用程序身份验证外部重定向 url