Spring Security와 OAuth2 소개

신광진·2021년 6월 14일
0
post-thumbnail

Spring Security

Spring Security는 인증과 인가기능을 가진 프레임워크이다.
Spring기반의 애플리케이션에서는 보안을 위한 표준으로 사용된다고 해도 무방하다.
스프링 시큐리티 외에도 인터셉터, 필터 기반으로 보안 기능을 구현할 수 있지만 스프링 시큐리티를 이용하여 구현하는 것을 적극적으로 권장하고 있으니 자세히 공부할 필요가 있다고 생각한다.

스프링부트 1.5 vs 스프링부트 2.0

스프링부트 1.5에서의 OAuth2 연동 방법이 2.0에서는 크게 변경되었지만 인터넷 자료들을 찾아보면 설정 방법에 차이가 크게 없는 경우를 자주 볼 수 있다.
이는 spring-security-oauth2-autoconfigure라이브러리 덕분이다.
위 라이브러리를 사용하면 스프링부트 1.5에서 사용하던 설정을 2.0에서 그대로 사용할 수 있다.
만약 자료를 검색할 때 스프링부트2 방식의 자료를 찾고 싶은 경우에는 먼저 spring-security-oauth2-autoconfigure라이브러를 사용했는지 확인하고 application.properties(또는 .yml) 정보를 확인해야 한다.

[SpringBoot 1.5]

google :
  client :
    clientId: 인증정보
    clientSecret: 인증정보
    accessTokenUri: https://accounts.google.com/o/oauth2/token
    userAuthorizationUri: https://accounts.google.com/o/oauth2/auth
    clientAuthenticationScheme: form
    scope: email, profile
  resource:
    userInfoUri: https://www.googleapis.com/oauth2/v2/userinfo

[SpringBoot 2.x]

spring:
  security:
    oauth2:
      client:
        clientId: 인증정보
        clientSecret: 인증정보

SpringBoot2.x 방식이 훨씬 간결하다는 것이 한눈에 보인다.
이는 1.5버전에서 직접 입력했던 값들이 2.0버전에서는 enum으로 대체되었기 때문이다.
CommonOAuth2Provider라는 enum이 새롭게 추가되어 구글, 깃허브, 페이스북, 옥타의 기본 설정값은 모두 여기서 제공된다.
이 외에 다른 소셜 로그인은 직접 추가해 주어야 한다.

Spring Security Oauth2 Client

위에서 말했던 것처럼 라이브러리를 사용하면 스프링부트 1.5에서 사용하던 설정방법을 그대로 사용할 수 있다.
또한, 많은 개발자들이 기존에 안전하게 작동하던 코드를 사용하기 위해 위에서 언급한 라이브러리를 사용하였다.
하지만 책에서는 스프링 부트 2.0방식을 사용한다.
이유는 아래와 같다.

  • spring-security-oauth 프로젝트는 유지 상태로 결정했으며, 더 이상 신규 기능은 추가하지 않고 버그 수정 정도의 기능만 추가될 예정이다.
    신규 기능은 새 oauth2 라이브러리에서만 지원한다고 스프링 팀에서 밝혔다.
  • 스프링 부트용 라이브러리(starter) 출시
  • 기존에 사용되던 방식은 확장 포인트가 적절하게 오픈되어 있지 않아 직접 상속하거나 오버라이딩 해야 하고 신규 라이브러리의 경우 확장 포인트를 고려해서 설계되었다.

SUMMARY

  • Spring Security는 강력한 인증, 인가처리 기능을 가진 프레임워크이며 인터셉터, 필터를 이용하는 것 보다 Spring Security를 이용한 인증, 인가처리 구현을 적극 권장한다.
  • spring-security-oauth2-autoconfigure를 사용하면 SpringBoot1.5에서 사용하던 설정을 2.x에서도 그대로 사용가능하다.
  • 2.x방식의 자료를 찾고싶은 경우에는 spring-security-oauth2-autoconfigure사용 여부와 application.properties(또는 .yml)내용을 살펴보아야 한다.
  • 스프링부트2 방식을 권장하는 이유
    • spring-securitu-oauth에서는 신규기능을 지원하지 않는다.
    • 스프링 부트용 라이브러리(starter)가 출시되었다.
    • 1.5방식에 비해 확장포인트가 잘 설계되어 있다.
profile
이거 왜안되냐

0개의 댓글