【发布时间】:2018-12-08 00:53:45
【问题描述】:
想象一下,
以下是 keyclock 中的 2 个客户端(2 个微服务)。
- rest-service-1
- rest-service-2
下面是rest-service-2中的角色
- service-2-user
做service to service调用,即:rest-service-1调用rest-service-2
'rest-service-1' 在 Keycloak 中配置了以下值
Access Type: confidential
Service Account Enabled: Yes
此外,在 rest-service-1 的“服务帐户角色”下,添加/映射了以下角色
Role for client rest-service-2: service-2-user
在 keyclock 中设置 2 个客户端和用于调用客户端的服务帐户后。我创建了一个 Spring boot 2.0.3 项目并使用以下代码获取令牌。
@Bean
public AuthzClient authzClient(KeycloakSpringBootProperties kcProperties) {
//org.keycloak.authorization.client.Configuration
Configuration configuration =
new Configuration(kcProperties.getAuthServerUrl(),
kcProperties.getRealm(),
kcProperties.getResource(),
kcProperties.getCredentials(), null);
return AuthzClient.create(configuration);
}
这是我获取访问令牌的方式
@Autowired
private AuthzClient authzClient;
public AccessTokenResponse token() {
return authzClient.obtainAccessToken();
}
以下是收到的令牌:
{
"access_token": ${access-token},
"expires_in": 300,
"refresh_expires_in": 1800,
"refresh_token": ${refresh-token},
"token_type": "bearer",
"id_token": null,
"not-before-policy": 0,
"session_state": "6f284b2f-5bb6-4018-8acd-b83923ebb7d7",
"scope": "profile email"
}
注意:我替换了标记以使其简短/简短。
问题:
如何使用上述刷新令牌并获取新的访问令牌。 AuthzClient 支持吗?如果是这样,我该怎么做?
我需要创建一个新的 TokenCallable 实例并获取令牌吗?如果可以,如何实例化 TokenCallable?
TokenCallable 线程安全吗?
【问题讨论】:
标签: spring-boot spring-security keycloak keycloak-services