使用Ambassador Filter时如何将HTTP方法映射至Keycloak资源
Ambassador + Keycloak 按HTTP方法配置权限映射方案
Ambassador FilterPolicy 原生支持HTTP方法匹配,结合Keycloak过滤器的scope校验能力,可以直接实现不同请求方法对应不同权限的需求,配置逻辑如下:
核心配置规则
- 在每条匹配规则中通过
method字段指定要匹配的HTTP方法(支持GET/POST/PUT/DELETE等所有标准方法,不填该字段时默认匹配该路径下的所有请求方法) - Keycloak侧定义的
product:view/product:edit这类权限scope,直接填入对应规则的filters.arguments.scopes数组即可,Ambassador会自动校验请求携带的JWT中是否包含对应scope,权限不满足时会按配置返回403或跳转授权页
完整配置示例
apiVersion: getambassador.io/v2 kind: FilterPolicy metadata: name: keycloak-filter-policy namespace: ambassador spec: rules: # GET请求访问商品详情,要求product:view权限 - host: "*" path: /product/:productId method: GET filters: - name: keycloak-filter namespace: ambassador arguments: scopes: - "product:view" # POST请求创建/修改商品,要求product:edit权限 - host: "*" path: /product/:productId method: POST filters: - name: keycloak-filter namespace: ambassador arguments: scopes: - "product:edit"
配置注意事项
- FilterPolicy的规则按从上到下的顺序优先级匹配,必须把指定了method的细粒度规则放在前面,无method的通用匹配规则放在最后,避免细粒度规则被提前命中失效
- 如果某条规则需要同时校验多个scope,直接在scopes数组中追加对应的scope值即可,过滤器默认要求请求携带所有列出的scope才会放行
- 同一路径下的PUT、DELETE等其他方法需要绑定不同权限时,参照上述格式新增对应method的规则块即可
- Keycloak的realm地址、客户端ID、客户端密钥等全局参数,统一在你引用的
keycloak-filter(Kind为Filter的资源)中配置,不需要在每条FilterPolicy规则里重复声明
内容的提问来源于stack exchange,提问作者Dean Chen
相关产品推荐
相关产品推荐

