Keycloak 使用HTTP方法进行密钥伪装授权

Keycloak 使用HTTP方法进行密钥伪装授权,keycloak,Keycloak,我开发了一些taskmanagement服务来学习/评估Key斗篷。到目前为止,我所拥有的: 用户: 玛吉 荷马 丽莎 巴特 服务: POST/safe/tasks:创建新任务 获取/安全/任务:列出所有任务 要求: 只有老板Marge才能创建新任务 新任务可以标记为“parentOnly” 每个人都应该能够列出任务。结果列表取决于调用服务的用户: 家长们得到了完整的名单 子任务仅获取非父任务 客户: 授权启用 访问类型:机密 授权范围: 任务:创建 任务:列表 任务:列

我开发了一些taskmanagement服务来学习/评估Key斗篷。到目前为止,我所拥有的:

用户:

  • 玛吉
  • 荷马
  • 丽莎
  • 巴特
服务:

  • POST/safe/tasks:创建新任务
  • 获取/安全/任务:列出所有任务
要求:

  • 只有老板Marge才能创建新任务
  • 新任务可以标记为“parentOnly”
  • 每个人都应该能够列出任务。结果列表取决于调用服务的用户:
    • 家长们得到了完整的名单
    • 子任务仅获取非父任务
客户:

  • 授权启用
  • 访问类型:机密
授权范围:

  • 任务:创建
  • 任务:列表
  • 任务:列出所有任务
资源:

  • 任务资源
    • URI:/safe/tasks
    • 范围:
      • 任务:创建
      • 任务:列表
      • 任务:列出所有任务
政策:

  • 仅限Boss(用户=Marge)
  • 仅限家长(用户=玛姬,荷马)
  • 仅限儿童(用户=巴特、丽莎)
  • 仅限家庭成员(合计=仅限父母+仅限子女)
权限:

  • Boss可以创建任务:连接/安全/具有范围的任务任务:创建和策略“仅限Boss”
  • 家庭可以列出任务:连接/安全/具有范围的任务任务:列出和策略“仅限家庭成员”
  • 父级可以列出所有任务:连接/安全/具有范围的任务任务:列出所有任务和策略“仅限父级”
它是作为Spring引导应用程序实现的,但有一个keydepoidcfilter监听模式“/keydeport/”和“/safe/”。政策执行正在进行中

到目前为止,有些事情是可行的:可以访问资源,可用范围(AuthorizationContext的转储)如预期的那样:

Lisa: Permission {id=5a1498e5-14e5-4353-8d5a-5fb12fc739c8, name=Tasks Resource, scopes=[tasks:list]}
Bart: Permission {id=5a1498e5-14e5-4353-8d5a-5fb12fc739c8, name=Tasks Resource, scopes=[tasks:list]}
Marge: Permission {id=5a1498e5-14e5-4353-8d5a-5fb12fc739c8, name=Tasks Resource, scopes=[tasks:list_full, tasks:list, tasks:create]}
Homer: Permission {id=5a1498e5-14e5-4353-8d5a-5fb12fc739c8, name=Tasks Resource, scopes=[tasks:list_full, tasks:list]}
因此,至少在GET/safe/tasks实现中,我可以检查list/list\u full并相应地返回任务

问题是:每个人都可以通过GETPOST访问资源

我已经尝试将http方法作为scope=true并进行了以下修改:

  • 添加了GET和POST as授权范围
  • 将POST as范围添加到权限“Boss可以创建任务”
  • 将GET-as范围添加到权限“家庭可以列出任务”
  • 将GET-as作用域添加到权限“家长可以列出所有任务”
至少只有玛吉能写这篇文章。但是AuthorizationContext的转储不再显示可用的作用域。我只看到一个帖子。
Marge:Permission:Permission{id=5a1498e5-14e5-4353-8d5a-5fb12fc739c8,name=Tasks-Resource,scopes=[POST]}
同时,它也打破了GET。现在,当Lisa调用get on/safe/tasks时,我得到403

如果有人能帮我,我会非常感激的。如何获得正确的权限,同时保留对AuthorizationContext中可用作用域的访问

提前谢谢