ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • OAuth2.0
    네트워크 2024. 8. 17. 01:32

    OAuth?

    OAuth는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트를 접속할 때 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 제3자 클라이언트가 사용자의 접근 권한 위임을 위한 개방형 표준 프로토콜입니다.

    구글, 카카오, 네이버 등과 같은 제3자 클라이언트가 우리의 서비스를 이용할 수 있는 권한을 부여하는 매커니즘입니다.

    OAuth를 사용하면 사용자는 아이디와 비밀번호 없이 간편하게 로그인과 회원가입을 할 수 있기 때문에 많이 사용하는 기술입니다.


    OAuth의 용어

    용어 설명
    Resource Owner 리소스의 원래 소유자입니다. 일반적으로 사용자를 의미합니다.
    Client 클라이언트는 OAuth2.0 용어로, 사용자의 리소스에 접근하려는 애플리케이션을 의미. 즉 우리의 서비스입니다.
    Resource Server 사용자의 데이터를 저장하고 있는 곳으로, 클라이언트가 이 서버를 통해 데이터에 접근합니다. ex) 구글
    Authorization Server 인증 서버는 클라이언트가 사용자의 데이터에 접근할 수 있도록 인증을 제공합니다.
    사용자의 승인을 받은 클라이언트에게 인증 서버는 접근 토큰을 발행합니다
    Authentication(인증)
    Resource Owner가 자신임을 증명하는 과정을 의미합니다.
    Authorization(인가)
    증된 사용자에게 특정 리소스에 접근하는 권한을 부여하는 과정입니다. 
    자신의 정보에 접근을 허용하면 해당 애플리케이션이 사용자의 정보를 읽거나 쓸 수 있는 권한을 얻게 됩니다. 
    Access Token Access Token은 OAuth2.0 프로토콜에서 사용되는 보안 토큰입니다.
    이 토큰은 인가된 클라이언트가 리소스 서버에 접근할 수 있는 권한을 제공합니다.
    토큰에는 리소스 소유자의 신원, 인가된 권한, 토큰의 유효 기간 등의 정보가 포함됩니다.
    Refresh Token Refresh Token은 Access Token이 만료되었을 때 새로운 Access Token을 받기 위해 사용되는 토큰입니다.
    Redirect URI OAuth 2.0 서비스는 인증이 성공한 사용자를 사전에 등록된 Redirect URI로만 리디렉션 시킵니다.
    등록되지 않은 URI는 Authorization Code를 탈취당할 위험성이 있기 때문입니다.

     


    OAuth 2.0의 Flow

    출처 : https://docs.oracle.com/cd/E50612_01/doc.11122/oauth_guide/content/oauth_flows.html

     

    1. 사용자 인증 요청 :  구글로 로그인 / 카카오 로그인 등을 통해 로그인을 요청한다.

    이 때, 클라이언트는 Authorization Server가 제공하는 url에 response_type, client_id, redirect_uri, scope 등의 매개변수를 쿼리 스트링으로 포함하며 보낸다.

    - response_type : 반드시 code로 값을 설정. 인증이 성공한 경우 Authorization Code를 받을 수 있다.

    - client_id : 애플리케이션을 생성할 때 받은 ID

    - redirect_uri : 애플리케이션을 생성할 때 등록한 redirect_uri

    - scope : 클라이언트가 설정한 리소스에 대한 접근 scope

     

    *인증 요청 예시

    GET /authorize?response_type=code&client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_REDIRECT_URI&scope=read_profile&state=YOUR_UNIQUE_STATE HTTP/1.1
    Host: authorization-server.com

     

    2. 인증 UI (로그인 페이지 제공) : 사용자가 ID, PW를 입력해 자격증명을 한다.

     

    3. Authroization Code 발급, Redirect URI로 리디렉션 : 자격 증명이 되었다면, 등록한 Redirect_URI에 Authorization Code를 포함하여 사용자를 리디렉션 한다.

    - Authorization Code : Client가 Access Token을 획득하기 위해 사용하는 임시 코드

     

    4. Authorization Code를 이용해 Access Token 획득 : Client가 획득한 Authorization Code를 Authorization Server에 전달하여 사용자의 리소스에 접근하기 위한 Access Token을 획득한다.

     

    * HTTP 요청의 예시

    POST /token HTTP/1.1
    Host: authorization-server.com
    Content-Type: application/x-www-form-urlencoded
    Authorization: Basic BASE64_ENCODED(client_id:client_secret)
    
    grant_type=authorization_code&code=AUTHORIZATION_CODE&redirect_uri=YOUR_REDIRECT_URI

     

    5. Access Token을 사용하여 리소스 접근 : 획득한 Access Token을 통해 Resource Server에 접근하여 Resource Owner의 제한된 정보를 획득한다.

     

    이후 획득한 사용자의 정보를 이용하여 회원가입 / 로그인 처리 / JWT Token 발급 등의 처리를 하면 됩니다.

     

    '네트워크' 카테고리의 다른 글

    STOMP  (0) 2024.08.19
    WebSocket  (0) 2024.08.19
    쿠키, 세션  (0) 2024.02.22
Designed by Tistory.