[Spring Security] OAuth2 인증

see1237·2022년 9월 29일
0

Section4

목록 보기
4/13

OAuth2

  • 사용자 정보를 보유하고 있는 신뢰할 만한 써드 파티 애플리케이션(GitHub, Google 등)에서 사용자의 인증을 대신 처리해 주고 접근 권한에 대한 토큰을 발급한 뒤 토큰을 이용해 써드 파티 애플리케이션의 서비스를 사용하게 해주는 방식
  • OAuth 2 인증 Component(구성요소)
    • Resource Owner
    • Client
    • Authorization Server
    • Resource Server
  • Authorization Grant
    Client 애플리케이션이 Access Token을 얻기 위한 Resource Owner의 권한을 표현하는 크리덴셜(Credential)을 의미 (Client가 Access Token을 얻기 위한 수단)
    • Authorization Code Grant(권한 부여 승인 코드 방식): 가장 많이 쓰이고 기본이 되는 방식
      • 권한 부여 승인을 위해 자체 생성한 Authorization Code를 전달하는 방식
      • 권한 부여 승인 요청시 응답 타입(response_type)을 code로 지정하여 요청
    • Implicit Grant : 암묵적 승인 방식
    • Resource Owner Password Credential Grant : 자원 소유자 자격 증명 승인 방식
    • Client Credentials Grant : 클라이언트 자격 증명 승인 방식

OAuth2 실습 포인트

  • 구글의 OAuth 2 인증 시스템을 사용하기 위해서는 구글 API 콘솔에서 OAuth 클라이언트를 생성해야 한다.
  • ClientRegistration은 OAuth 2 시스템을 사용하는 Client 등록 정보를 표현하는 객체이다.
  • Spring Security에서 제공하는 CommonOAuth2Provider enum은 내부적으로 Builder 패턴을 이용해 ClientRegistration 인스턴스를 제공하는 역할을 한다.
  • AuthenticationSuccessHandler 구현
    • OAuth 2 인증 후, Frontend 애플리케이션 쪽으로 JWT를 전송하는 핵심 역할
    • 여기에서 JWT를 생성하고, Frontend 쪽으로 JWT를 전송하기 위해 Redirect 하는 로직을 구현
    • SimpleUrlAuthenticationSuccessHandler를 상속하면 Redirect를 손쉽게 할 수 있는 getRedirectStrategy().sendRedirect() 같은 API를 사용할 수 있다.
  • OAuth 2 인증 시스템을 사용하면 회원 정보를 등록하거나 수정할 필요가 없기 때문에 관련 코드 수정

실습 후기

  • JWT만 사용한 방식과의 차이를 중점으로, JWT와 OAuth2를 함께 사용한 방식의 애플리케이션 구현에 대해 다시 정리하며 학습할 것
  • Frontend 애플리케이션의 실행 환경을 위해 아파치 웹서버 설치 후 실행하였을 때, Whitelabel Error Page 에러가 나서 해결하는데 어려움을 겪었는데, 맥은 이미 아파치가 설치되어있어서 homebrew를 통해 또 설치한 것이 문제였다. 새로 설치한 것을 제거하고 나니 실행되었다. 설정이 잘못되었다고 생각해서 설정을 이리저리 바꾸느라 오래 걸렸는데, 에러의 원인을 잘 파악하는 것이 중요함을 또한번 느꼈다.

0개의 댓글