我有一个JHipster网关和微服务,目前配置为通过Keycloak使用OAUTH / OIDC。目前,经过身份验证的用户可以使用所有资源。我想使用keycloak中可用的细粒度安全性(在JHipster Microservice客户端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
答案 0 :(得分:0)
由于Jhipster不支持https://www.keycloak.org/docs/latest/authorization_services/index.html#_resource_server_enable_authorization中描述的Keycloak资源服务器授权,为了更细致地保护资源,我决定:
123 - Account Manager - Employee - Supervisor 456 - Account Manager - Employee - Supervisor
可以将用户帐户分配给各个组。例如,用户“John”可以访问公司“456”和角色“Employee”
通过Keycloak Mappers(这是Keycloak客户端配置/ Mappers中的配置)将组层次结构添加为对JWT令牌的声明
在微服务中,对访问受限资源的任何查询使用添加的JWT组声明。