스프링부트 소셜 로그인

Wintering·2022년 6월 28일
0

Spring

목록 보기
4/4
  • Spring Security
    Spring기반의 어플리케이션 권한과 인증, 인가등의 보안을 담당하는 하위 프레임워크
    인증과 권한을 Filter의 흐름에 따라 처리하게 구현되어 있음
  • OAuth2
    Open Authentication2 의 약자
    인증 및 권한획득을 위한 업계표준 프로토콜
    OAuth 인증을 통하면 신뢰할 수 있는 플래폼이 인증과 리소스에 대한 권한을 외부 플랫폼에 부여함
    사용자는 회원가입을 한번더 하지 않아도 되는 장점이 있음
    - OAuth2의 구성
    	- Resource Owner : 사용자
    	- Client : 리소스 서버에 제공해주는 자원을 사용하는 외부 플랫폼
     	- Authorization Server : 외부 플랫폼이 리소스 서버의 사용자 자원을 사용하기 위한 인증 서버
        - Resource Server : 사용자의 자원을 제공해주는 서버
    • Oauth2의 인증방식
      • Authorizaition Code Grant : 권한 코드 승인 방식
        • 일반적으로 서버 사이드에서 인증을 처리할 때 이용.
          Resource Owner로 부터 리소스 사용에 대한 허락을 의미하는 Authorization code를 이용하여 Access Token을 요청하는 방식.
      • Implict Grant : 암시적 승인
      • Password Credentials Grant : 비밀번호 자격 증명 방식
      • Client Credentials Grant : 클라이언트 자격 증명 방식

  • 시퀀스
    1. 소셜 로그인 요청
    2. 백엔드로 GET "/oauth2/authorization/{provider-id}?redirect_url=http://localhost:3000/oauth/redirect"로 OAuth 인가 요청
    3. Provider 별로 Authorization Code 인증을 할 수 있도록 리다이렉트
      (Redirect : Get"https://oauth.provider.com/oauth2.0/authorize?...")
    4. 리다이렉트 화면에서 provider 서비스에 로그인
    5. 로그인이 완료된 후, Authrization server로부터 백엔드로 Autorization Code에 응답
    6. 백엔드에서 인가 코드를 이용하여 Authorization Server에 엑세스토큰 요청
    7. 엑세스 토큰 획득
    8. 엑세스 토큰을 이용하여 Resource Sever에 유저 데이터 요청
    9. 획득한 유저 데이터를 DB에 저장한 후, JWT 액세스 토큰과 리프레시 토큰을 생성
    10. 리프레시 토큰은 수정 불가능한 쿠키에 저장하고, 액세스 토큰은 프론트엔드 리다이렉트 URI에 쿼리스트링 토큰을 담아 리다이렉트
      (Redirect: GET http://localhost:3000/oauth/redirect?token={jwt-token})
    11. 프론트엔드에서 토큰을 저장 후 API요청시 헤더에 Authorization: Bearer{Token}을 추가하여 요청
    12. 백엔드에서는 토큰을 확인하여 권한 확인
    13. 토큰이 만료된 경우, 쿠키에 저장 된 리프레시 토큰을 이용하여 액세스 토큰과 리프레시 토큰을 재발급

0개의 댓글