【问题标题】:Does JHipster support the Keycloak client resource authorization configuration?JHipster 是否支持 Keycloak 客户端资源授权配置?
【发布时间】:2018-09-25 08:19:45
【问题描述】:

我有一个 JHipster 网关和微服务,当前配置为通过 Keycloak 使用 OAUTH/OIDC。目前,所有资源都可供经过身份验证的用户使用。我想使用 keycloak 中可用的细粒度安全性(在 JHipster 微服务客户端 id 上启用授权)通过资源 id 进一步保护(如 Keycloak 文档中所引用) https://www.keycloak.org/docs/latest/authorization_services/index.html#_resource_server_enable_authorization。例如,将 */api/companies/{id} 限制为仅某些 Keycloak 用户/组。

Jhipster 支持这个吗?根据日志,似乎可以将 AccessControlFilter 配置为限制,但我不清楚这如何连接到 Keycloak 细粒度资源身份验证。

2018-04-15 07:11:20.905 DEBUG 18184 --- [  XNIO-2 task-8] c.e.gateway.aop.logging.LoggingAspect    : Enter: com.example.gateway.web.rest.AccountResource.getAccount() with argument[s] = [org.springframework.security.oauth2.provider.OAuth2Authentication@2ea9380c: Principal: user; Credentials: [PROTECTED]; Authenticated: true; Details: remoteAddress=0:0:0:0:0:0:0:1, sessionId=<SESSION>, tokenType=bearertokenValue=<TOKEN>; Granted Authorities: company.jcb.role1, ROLE_USER]
2018-04-15 07:11:20.907 DEBUG 18184 --- [  XNIO-2 task-8] c.e.gateway.aop.logging.LoggingAspect    : Exit: com.example.gateway.web.rest.AccountResource.getAccount() with result = com.example.gateway.domain.User@3a45e83a
2018-04-15 07:11:22.208 DEBUG 18184 --- [oundChannel-104] c.e.g.web.websocket.ActivityService      : Sending user tracking data ActivityDTO{sessionId='hchu0fkx', userLogin='user', ipAddress='/0:0:0:0:0:0:0:1:54212', page='/', time='2018-04-15T13:11:22.208Z'}
2018-04-15 07:11:24.634 DEBUG 18184 --- [ XNIO-2 task-19] c.e.g.g.a.AccessControlFilter            : Access Control: allowing access for /micro/api/companies, as no access control policy has been set up for service: micro

【问题讨论】:

  • 有什么理由不能像我们在 jhipster-realm.json 中那样定义领域角色?
  • 如有必要,我可以做类似的事情,但我希望利用 keycloak 资源授权解决方案,这样我就不需要在应用程序中编写安全管理。 AccessControlFilter 或扩展 ZuulFilter 是否是调用 KeyCloak 的另一种选择,并且仍然可以很好地与现有的 Keycloak OAUTH 集成配合使用?
  • 我不知道。您已决定使用 Keycloak 特定的功能,而 JHipster 的方法是构建可以应用于多个身份提供者的东西,例如 Keycloak 和 Okta 以及可能的其他身份提供者。如果您认为这足够通用,您可以在 github 上提出并贡献增强请求

标签: jhipster keycloak


【解决方案1】:

由于 Jhipster 不支持 https://www.keycloak.org/docs/latest/authorization_services/index.html#_resource_server_enable_authorization 中描述的 Keycloak 资源服务器授权,为了更精细地保护资源,我决定:

  • 创建要在微服务中保护的资源后,我通过 Keycloak API 动态创建 Keycloak 组层次结构。例如,如果我想保护对公司 123 和 456 的访问,并且我有以下角色:客户经理、员工、主管,我会创建 Keycloak 组层次结构
123
- Account Manager
- Employee
- Supervisor  

456
- Account Manager
- Employee
- Supervisor

用户帐户可以分配给不同的组。例如,用户“John”可能有权访问公司“456”和角色“Employee”

  • 通过 Keycloak 映射器将组层次结构添加为 JWT 令牌的声明(这是 Keycloak 客户端配置/映射器中的配置)

  • 在微服务中,对访问受限资源的任何查询使用添加的 JWT 组声明。

【讨论】:

    猜你喜欢
    • 2019-04-06
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-28
    • 2020-07-04
    • 1970-01-01
    • 2020-10-08
    相关资源
    最近更新 更多