Spring Security OAuth, JWT를 활용한 인증 과정 개념 및 구현 총 정리(1)- OAuth 개념과 로그인 및 회원가입에 활용하기

taehee kim·2023년 4월 2일
0

0. OAuth2.0란

  • 웹 서비스를 사용하다 보면 직접 웹 서비스에 회원가입 하지 않고, 구글, 네이버등 이미 회원가입된 정보를 가지고 간편히 로그인 및 회원가입을 할 수 있는 기능을 볼 수 있습니다. 이때 사용되는 프로토콜이 OAuth입니다.
  • OAuth의 정확한 정의는 다음과 같습니다.

OAuth는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준이다. (위키백과)

  • 이를 풀어서 설명하면 이미 인증된 서비스(네이버, 구글등)에 저장된 유저의 정보를 현재 사용중인 서비스가 접근할 수 있도록 허락해주는 방식을 말합니다.
  • 이를 활용하여 간접적으로 로그인 및 회원가입과 유사한 효과로 구현할 수 있는 것입니다.(OAuth자체가 회원가입 로그인을 위한 것은 아닙니다.)

1. OAuth참여자

  • Resource Server : Client가 제어하고자 하는 자원을 보유하고 있는 서버입니다.
    • Facebook, Google, Twitter 등이 이에 속합니다.
  • Resource Owner : 자원의 소유자입니다.
    • Client가 제공하는 서비스를 통해 로그인하는 실제 유저가 이에 속합니다.
  • Client : Resourece Server에 접속해서 정보를 가져오고자 하는 클라이언트(웹 어플리케이션)입니다.
  • 어떤 유저가 Facebook에 로그인 한 상태로 새로운 웹 서비스에 OAuth를 통해 회원가입 및 로그인을 하고자 할 때 어떤 유저는 ResourceOwner, Facebook은 Resource Server, 새로운 웹 서비스는 Client에 해당합니다.

2. OAuth 과정및 개념

2.1 Resource Server에 Client등록

Client ID : 클라이언트 웹 어플리케이션을 구별할 수 있는 식별자이며, 노출이 무방합니다.
Client Secret : Client ID에 대한 비밀키로서, 절대 노출해서는 안 됩니다.
Authorized redirect URL : Authorization Code를 전달받을 리다이렉트 주소입니다.

2.2 Resource Owner의 승인.

  • 2.1에서 얻은 정보를 Resource Owner가 다음과 같은 uri로 요청하면 해당 client의 자원 접근을 허용함을 확인하는 창을 받게 됩니다.
  • 자원 허용 scope가 표시되고 authorize버튼이 있는 식으로 화면이 구성되는 경우가 일반적이며 해당 버튼을 누르게 되면 Resource Owner가 Client의 자원 접근을 허용하게 되고 Resource Server는 redirect_uri로 Authorization code를 가지고 redirection합니다.

2.3 Redirect_uri(callback)에 code로 Access token발급 요청

  • Client는 Callback api를 구성하여 이를 redirect_uri로 2.1과정에서 Resource Server에 등록해 둡니다.
  • 2.2과정에서 Resource Owner의 승인이 이루어지면 Authorization code를 가지고 redirect_uri로 리다이렉션 합니다.
  • Client는 이 callback api에 Resource Server로 accesstoken 발급을 요청을합니다.

2.4 Access Token발급과 Resource Server에 Access Token을 이용하여 Resource Owner 정보 요청.

  • Access Token을 발급 받으면 이를 가지고 Resource Owner의 정보를 알 수 있는 API를 호출하여 회원정보를 받아온다.

2.5 Resource Server로 부터의 회원정보로 로그인 혹은 회원가입 진행.

2.6 SessionId 혹은 JWT token등을 발행하여 로그인한 유저에게 발급.

  • 이는 사실은 OAuth와는 무관하며 2.5까지 진행되고 나면 로그인 인증상태라고 판단하고 SessionId나 JWT token을 발급한다.

3.구현

3.1 Resource Server에 Client등록

  • Resource Server마다 다르지만 기본적으로 동일한 것은
    • Resource Server에서 client를 식별할 수 있게 Client Id, Client Secret을 발급 받는 부분
    • Redirect_uri 명시: redirect uri는 code 인증 방식에서 code를 리다이렉션을 통해 발급받는 uri를 말함
    • scope지정: 승인할 자원의 scope지정.

3.2 redirect_uri에서 code로부터 Access Token발급과 user-info api 요청.

  • Spring Security에서는 redirect-uri를 yml에 설정하는 것으로 access token발급과 유저의 정보와 관련된 api요청을 자동화 할 수 있음.
spring:
  security:
    oauth2:
      client:
        registration:
          authclient:
            provider: authclient
            client-id:
            client-secret: 
            authorization-grant-type: authorization_code
            redirect-uri: https://{client 도메인}/login/oauth2/code/authclient
            scope:
              - public
              - profile
        provider:
          authclient:
            authorization-uri: https://{resource_server_domain}/oauth/authorize
            token-uri: https://{resource_server_domain}/oauth/token

            user-info-uri: https://{resource_server_domain}/v2/me
            user-name-attribute: login

3.3 SessionId 혹은 JWT token등을 발행하여 로그인한 유저에게 발급.

profile
Fail Fast

0개의 댓글