Server/Spring (Boot & Framework)

[Spring] Spring Security 1.5 -> 2.x 버전 업데이트에 따른 변화

ooeunz 2020. 1. 9. 13:50
반응형

Spring Security version up에 따른 이슈

Spring Boot가 1.5 버전에서 2.x 버전으로 업그레이드되면서 많은 변화가 있었다. 그중 security와 OAuth2 인증 부분에서 여러 변화가 생겼다. 그로 인해 하위 버전과 호환되지 않는 기능들이 생겨났다.

 

 

(출처) https://hue9010.github.io/spring/OAuth2/

 

 

 

하지만 안타깝게도, 대부분의 구글링에 나오는 레퍼런스들은 아직 1.5 버전을 기준으로 포스팅이 되어있거나, 이미 1.5버전으로 구현이 되어있는 상태에서 2.x버전의 기능들을 사용해야할 경우에 문제가 발생한다.

 

그럴 때 임시방편으로 아래와 같이 dependencies를 변경해줌으로써 1.5버전과 2.x버전을 둘다 호환 가능하도록 할 수 있다.

 

2.x만 호환되던 아래의 dependendies에서

dependencies {
        compile('org.springframework.security.oauth:spring-security-oauth2')
}

 

d아래와 같이 변경하면 1.5, 2.x버전 둘다 호환이 됨.

repositories {
        mavenCentral()
        //If you are using a SNAPSHOT version
  maven { url 'https://repo.spring.io/snapshot' }
        //If you are using a milestone or release candidate version
        //현재는 SNAPSHOT 버전이기 때문에 필요 없습니다.
        //maven { url 'https://repo.spring.io/milestone' }
}

dependencies {
        compile 'org.springframework.security.oauth.boot:spring-security-oauth2-autoconfigure:2.0.1.BUILD-SNAPSHOT'
}

 

 

 

 

의존성 변경

1.5 버전에서는 spring-security-oauth2만 설정해주어도 됐지만 2.0 버전부터는 설정이 세분화되었다. 기본적인 OAuth2 인증 관련 객체들이 security로 이전되었고, 클라이언트 자동 인증 설정을 위해 spring-security-oauth2-client를 추가적으로 추가해야 한다. 또한 2.0에서 JOSE(Javascript Object Signing and Encryption)이 추가되었다. JOSE는 JWT(JSON Web Tokens)의 권한을 안전하게 전송하는 프레임워크로 JWT의 리소스 접근 권한 정보의 암호화/복호화 및 일정 기능을 제공한다.

 

dependencies {
    compile('org.springframework.security:spring-security-oauth2-client')
    compile('org.springframework.security:spring-security-oauth2-jose')
    compile('org.springframework.boot:spring-boot-starter-security')
}

 

또한 OAuth2의 security스펙에 google과 facebook과 같은 여러 소셜 정보를 기본값으로 제공해주고 있기 때문에 더 이상 

 

UserInfoTokenService

ReSourceServerProperties

AuthorizationCodeResourceDetails

 

와 같은 것들을 구현할 필요 없다.

 

그에 따른 application.yml의 변화는 아래와 같다.

 

(좌) v1.5 yml, (우) v2.x yml

 

 

 

반응형