我正在构建一个微服务架构,该架构由spring boot rest api组成,将由移动应用程序(本机脚本或本地本机)和SPA(vuejs)使用。
我将Keycloak用于OpenId连接服务器。据我了解,我应该将客户端访问类型用作移动应用程序和spa的公共访问类型。并且,用于API的承载令牌。
在spring boot api上,某些路径是公用的,以允许在Keycloak上进行注册/忘记密码操作,并且保护其他端点。
application.yaml
security:
oauth2:
resourceserver:
jwt:
jwk-set-uri: http://localhost:8080/auth/realms/sociter/protocol/openid-connect/certs
issuer-uri: http://localhost:8080/auth/realms/sociter
我正在使用最新的spring安全性,它仅需要jwt设置。我的API得到很好的保护,但是当我使用该库调用keycloak admin rest api时,我得到了
javax.ws.rs.BadRequestException: HTTP 400 Bad Request
要调用admin rest api,我必须提供以下所有keycloak配置
keycloak:
server: http://localhost:8080/auth
realm: sociter
username: realm-admin
password: 123123
client-id: api-client
client-secret: 8f36d1a1-63d6-448a-9d4c-542add294db2
@Configuration
class KeycloakConfig(private val settings: KeycloakSettings) {
@Bean
fun keycloak(): Keycloak {
return KeycloakBuilder
.builder()
.serverUrl(settings.server)
.realm(settings.realm)
// .grantType(OAuth2Constants.PASSWORD)
.username(settings.username)
.password(settings.password)
.clientId(settings.clientId)
// .clientSecret(settings.clientSecret)
.resteasyClient(ResteasyClientBuilder().connectionPoolSize(10).build())
.build()
}
}
我已经配置了两个客户端,一个用于移动应用程序(postman-client),另一个用于spring boot api(api-client)。
用户realm-admin具有领域管理角色,允许执行管理员操作。
我的问题如下:
1)我对访问类型的理解正确吗?
2)如果是,我如何配置访问类型承载的api-client只支持管理员操作?
3)还是我需要通过Spring Boot对keycloak管理员操作进行保密的第三种客户端类型?
很抱歉,这是一个已加载的问题。
谢谢