1. OAuth 2.0 (Open Authorization)
- OAuth 2.0은 인터넷 사용자들이 제3자 애플리케이션에 자신의 자격 증명을 노출하지 않고, 서비스에 대한 접근 권한을 안전하게 부여할 수 있는 인증 및 권한 부여 프레임워크입니다. 주로 소셜 로그인, API 사용 권한 위임 등에서 사용됩니다.
- OAuth 방석 : 로그인 시 외부 소셜 계정을 기반으로 간편하게 인증하는 인증 서비스가 많은데, 이렇게 Third-Party 프로그램(우리가 개발하는 웹)이 Client를 대신해 리소스 서버에서 제공하는 자원에 대한 접근 권한을 위임받는 방식
2. 주요 개념
- Resource Owner (자원 소유자) : 사용자로, 서비스에 대한 접근 권한을 가지고 있는 주체
- 구글 계정에 로그인한 사용자
- Client (클라이언트) : 자원 소유자의 권한을 빌려 서비스를 사용하려는 애플리케이션
- 구글 계정을 통해 로그인하려는 어플리케이션
- Authorization Server(인증 서버) : 클라이언트가 자원 소유자에게 권한을 부여받을 수 있도록 인증을 담당하는 서버
- 구글의 인증 서버
- Resource Server (자원 서버) : 클라이언트가 자원 소유자의 권한을 가지고 접근할 자원을 관리하는 서버
- 구글의 API 서버
3. 동작 방식
- 권한 요청 (Authorization Request) : 클라이언트가 자원 소유자에게 권한을 부여해달라고 요청. 사용자는 인증 서버를 통해 로그인하고 권한을 부여한다.
- 권한 부여 (Authorization Grant) : 자원 소유자가 클라이언트에 대해 권한을 부여하면, 인증 서버는 클라이언트에게 Authorzation Code(권한 부여 코드)를 발급
- Access Token 발급 (Token Request) : 클라이언트는 이 권한 부여 코드를 인증 서버에 제출하여 Access Token(접근 토큰)을 발급받는다. 이 토큰은 클라이언트가 자원 서버에 접근할 때 사용
- 자원 접근(Access Resource) : 클라리언트는 자원 서버에 Access Token을 제출하여 자원에 접근. 자원 서버는 토큰을 검증하고 자원을 제공한다.
4. 권한 부여 방식 (Grant Types)
- Authorization Code Grant : 가장 일반적으로 사용되는 방식. 클라이언트가 직접 자격 증명 정보를 다루지 않으며, 보안성이 높다.
- Implict Grant : 브라우저 기반 클라이언트에서 사용되며, Access Token을 직접 발급반든다. 보안성이 낮아 주로 사용되지 않는다.
- Resource Owner Password Credentials Grant : 사용자 이름과 비밀번호를 직접 입력하는 방식. 사용자가 클라이언트 애플리케이션을 신뢰하는 경우에만 사용
- Client Credentials Grant : 서버 간 통신에서 주로 사용되며, 클라리언트가 스스로 인증하여 자원에 접근할 수 있다.
5. 장점
- 보안성 : 자격 증명을 직접 다루지 않고, Access Token을 사용하므로 사용자 정보 유출 위험이 적다.
- 범용성 : 다양한 서비스와 애플리케이션에서 통합적으로 사용 가능
- 확장성 : 소셜 로그인, API 접근 권한 등 다양한 방식으로 확장 가능
6. 참조
1. OAuth 2.0 : https://velog.io/@choidongkuen/OAuth02-%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C