是否可以阻止用户在 Azure api 管理中使用 api 操作?

is it possible to block users from using api operations in azure api management?

我写了下面的代码来阻止用户从 group dev 中使用 api 操作。我想知道是否有一种方法可以阻止组中的用户访问特定的方法,如 put、delete 并且只允许组中的用户使用 get 方法?

<choose>
    <when condition="@(context.User.Groups.Any(g => g.Name == "dev"))">
        <return-response>
            <set-status code="403" reason="Unauthorized" />
            <set-body>Users in group dev do not have access to this method.</set-body>
        </return-response>
    </when>
</choose>

Role-based访问控制有帮助,请看下面:

以下是 Azure RBAC 用于确定您是否有权访问资源的 high-level 步骤。这些步骤适用于 Azure 资源管理器或与 Azure RBAC 集成的数据平面服务。这有助于了解您是否正在尝试解决访问问题。

  1. 用户(或服务主体)获取 Azure 资源管理器的令牌。

令牌包括用户的组成员身份(包括传递组成员身份)。

  1. 用户使用附加的令牌对 Azure 资源管理器进行 REST API 调用。

  2. Azure 资源管理器检索所有角色分配和拒绝分配,这些角色分配适用于正在执行操作的资源。

  3. 如果应用拒绝分配,访问将被阻止。否则,评估继续。

  4. Azure 资源管理器缩小了适用于此用户或其组的角色分配范围,并确定用户对该资源具有的角色。

  5. Azure 资源管理器确定 API 调用中的操作是否包含在用户对该资源的角色中。如果角色包括具有通配符 (*) 的操作,则通过从允许的操作中减去 NotActions 来计算有效权限。类似地,对任何数据操作进行相同的减法。

Actions - NotActions = 有效的管理权限

DataActions - NotDataActions = 有效数据权限

  1. 如果用户在请求的范围内没有执行操作的角色,则不允许访问。否则,将评估任何条件。

  2. 如果角色分配包含条件,则会对其进行评估。否则允许访问。

  3. 如果满足条件,则允许访问。否则不允许访问。

您可以使用 'validate-jwt' 策略和 Allow/restrict 基于调用方法的访问。用户在调用 API 时会出示 JWT 令牌,您可以使用操作级别策略或 API 级别策略(基于方法检查)并验证 JWT 令牌声明。

您可以在此处参考微软文档以了解政策的使用:https://docs.microsoft.com/en-us/azure/api-management/api-management-access-restriction-policies#ValidateJWT

 <set-variable name="isAccessible" value="@(context.User.Groups.Any(g => g.Name == "dev") && context.Request.Method==PUT)" />

 <choose>
       <when condition="@(context.Variables.GetValueOrDefault<bool>("isAccessible"))">
            <return-response>
                 <set-status code="403" reason="Unauthorized" />
                <set-body>Users in group dev do not have access to this method.</set-body>
            </return-response>
         </when>
     </choose>

PS:未测试