client settings

dependencies {
	..
    implementation("org.springframework.boot:spring-boot-starter-security")
    ..
    implementation("org.springframework.security:spring-security-oauth2-client")
    implementation("org.springframework.security:spring-security-oauth2-jose")
}
spring.security.oauth2.client.provider.keycloak.issuer-uri=https://니꺼키클록/auth/realms/니꺼
spring.security.oauth2.client.provider.keycloak.authorization-uri=https://니꺼키클록/auth/realms/니꺼/protocol/openid-connect/auth
spring.security.oauth2.client.provider.keycloak.token-uri=https://니꺼키클록/auth/realms/니꺼/protocol/openid-connect/token
spring.security.oauth2.client.provider.keycloak.user-info-uri=https://니꺼키클록/auth/realms/니꺼/protocol/openid-connect/userinfo
spring.security.oauth2.client.provider.keycloak.jwk-set-uri=https://니꺼키클록/auth/realms/니꺼/protocol/openid-connect/certs
spring.security.oauth2.client.provider.keycloak.user-name-attribute=preferred_username
spring.security.oauth2.client.registration.keycloak.client-id=니꺼클라
spring.security.oauth2.client.registration.keycloak.client-secret=니꺼
spring.security.oauth2.client.registration.keycloak.authorization-grant-type=authorization_code
spring.security.oauth2.client.registration.keycloak.scope=openid
@Configuration
@EnableSwagger2
class SwaggerConfig : WebFluxConfigurer {
    private val log = LoggerFactory.getLogger(javaClass)

    override fun addResourceHandlers(registry: ResourceHandlerRegistry) {
        val baseUrl: String = StringUtils.trimTrailingCharacter("/api", '/') // 적당히 수정
        registry.addResourceHandler("$baseUrl/swagger-ui/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/")
                .resourceChain(false)
    }

    @Bean
    fun securityConfiguration(): SecurityConfiguration? {
        val additionalQueryStringParams: MutableMap<String, Any> = HashMap()
        additionalQueryStringParams["nonce"] = "123456" // 랜덤값
        return SecurityConfigurationBuilder.builder()
                .clientId("클라이름").realm("니꺼").appName("swagger-ui")
                .additionalQueryStringParams(additionalQueryStringParams)
                .build()
    }

    @Bean
    fun api(): Docket? {
        return Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.example.demo")) // 요기 수정
                .paths(PathSelectors.any())
                .build().securitySchemes(buildSecurityScheme()).securityContexts(buildSecurityContext())
    }

    private fun buildSecurityContext(): List<SecurityContext>? {
        val securityReferences: MutableList<SecurityReference> = ArrayList()
        securityReferences.add(SecurityReference.builder().reference("oauth2").scopes(scopes().toTypedArray()).build())
        val context: SecurityContext = SecurityContext.builder().operationSelector { true }.securityReferences(securityReferences).build()
        val ret: MutableList<SecurityContext> = ArrayList<SecurityContext>()
        ret.add(context)
        return ret
    }

    private fun buildSecurityScheme(): List<SecurityScheme?>? {
        val lst: MutableList<SecurityScheme?> = ArrayList<SecurityScheme?>()
        val login = LoginEndpointBuilder().url("니꺼/auth/realms/니꺼/protocol/openid-connect/auth").build()
        val gTypes: MutableList<GrantType> = ArrayList<GrantType>()
        gTypes.add(ImplicitGrant(login, "acces_token"))
        lst.add(OAuth("oauth2", scopes(), gTypes))
        return lst
    }

    private fun scopes(): List<AuthorizationScope?> {
        val scopes: MutableList<AuthorizationScope?> = ArrayList()
        for (scopeItem in arrayOf("openid=openid", "profile=profile")) {
            val scope = scopeItem.split("=").toTypedArray()
            if (scope.size == 2) {
                scopes.add(AuthorizationScopeBuilder().scope(scope[0]).description(scope[1]).build())
            } else {
                log.warn("Scope '{}' is not valid (format is scope=description)", scopeItem)
            }
        }
        return scopes
    }
}

 

'개발 팁' 카테고리의 다른 글

Microk8s docker image/tag 목록 확인하기  (0) 2024.02.23
이미 helm으로 설치한 mongodb/redis password 변경하기  (0) 2024.02.23
바다/강  (0) 2020.10.27
수중생물  (0) 2020.10.27
아무단어  (0) 2020.10.27

+ Recent posts