带有Keycloak的移动应用程序身份验证调用受保护的Spring Boot API

时间:2018-10-23 19:17:31

标签: spring-boot spring-security kotlin openid-connect keycloak

我正在构建一个微服务架构,该架构由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管理员操作进行保密的第三种客户端类型?

很抱歉,这是一个已加载的问题。

谢谢

0 个答案:

没有答案