是否可以阻止用户在 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 集成的数据平面服务。这有助于了解您是否正在尝试解决访问问题。
- 用户(或服务主体)获取 Azure 资源管理器的令牌。
令牌包括用户的组成员身份(包括传递组成员身份)。
用户使用附加的令牌对 Azure 资源管理器进行 REST API 调用。
Azure 资源管理器检索所有角色分配和拒绝分配,这些角色分配适用于正在执行操作的资源。
如果应用拒绝分配,访问将被阻止。否则,评估继续。
Azure 资源管理器缩小了适用于此用户或其组的角色分配范围,并确定用户对该资源具有的角色。
Azure 资源管理器确定 API 调用中的操作是否包含在用户对该资源的角色中。如果角色包括具有通配符 (*) 的操作,则通过从允许的操作中减去 NotActions 来计算有效权限。类似地,对任何数据操作进行相同的减法。
Actions - NotActions = 有效的管理权限
DataActions - NotDataActions = 有效数据权限
如果用户在请求的范围内没有执行操作的角色,则不允许访问。否则,将评估任何条件。
如果角色分配包含条件,则会对其进行评估。否则允许访问。
如果满足条件,则允许访问。否则不允许访问。
您可以使用 '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:未测试
我写了下面的代码来阻止用户从 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 集成的数据平面服务。这有助于了解您是否正在尝试解决访问问题。
- 用户(或服务主体)获取 Azure 资源管理器的令牌。
令牌包括用户的组成员身份(包括传递组成员身份)。
用户使用附加的令牌对 Azure 资源管理器进行 REST API 调用。
Azure 资源管理器检索所有角色分配和拒绝分配,这些角色分配适用于正在执行操作的资源。
如果应用拒绝分配,访问将被阻止。否则,评估继续。
Azure 资源管理器缩小了适用于此用户或其组的角色分配范围,并确定用户对该资源具有的角色。
Azure 资源管理器确定 API 调用中的操作是否包含在用户对该资源的角色中。如果角色包括具有通配符 (*) 的操作,则通过从允许的操作中减去 NotActions 来计算有效权限。类似地,对任何数据操作进行相同的减法。
Actions - NotActions = 有效的管理权限
DataActions - NotDataActions = 有效数据权限
如果用户在请求的范围内没有执行操作的角色,则不允许访问。否则,将评估任何条件。
如果角色分配包含条件,则会对其进行评估。否则允许访问。
如果满足条件,则允许访问。否则不允许访问。
您可以使用 '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:未测试