OAuth2
in Web
본 글은 네이버 부스트캠프를 위해 학습한 내용을 노션에서 이전한 게시글입니다.
OAuth2란
- 인증을 위한 개방향 표준 프로토콜
- Third-Party 프로그램에게 리소스 소유자를 대신에 리소스 서버에서 제공하는 자원에 대한 접근 원한을 위임하는 방식으로 작동
- 구글, 페이스북 등 외부 소셜 계정을 기반으로 간편하게 인증하는 기능
OAuth2 제공자
- 구글
- 페이스북
- 카카오
- 네이버
먼저 알아야 할 용어
- Authentication(인증) : 인증, 접근 자격이 있는지 검증하는 단계
- Authorization(인가) : 자원에 접근할 권한을 부여하고 리소스 접근 권한이 있는 Access Token을 제공
- Access Token : 리소스 서버에게서 정보를 획득할 때 사용하는 토큰, 만료 기간이 있음
- Refresh Token : Access Token이 만료 시 재발급 받기 위한 용도로 사용하는 Token
OAuth 역할별 용어
- client : 우리가 개발한 서비스(service), 어플리케이션(Application)을 의미
- Resource Owner : 리소스 소유자, 자격을 승인하는 주체 (ex: 구글 로그인을 할 사용자)
- Resource Server : 구글, 페이스북, 카카오, 네이버 등의 회사를 의미, client와 resource owner가 사용하는 자원들을 관리하여 유효성을 체크
- Authorization Server : 권한을 부여해주는 서버, 사용자 ID/PW를 넘겨 Authorization Code를 발급받을 수 있음, Client → Authorization Code를 넘겨 Token을 발급받을 수 있음
시퀀스 다이어그램 플로우
- 그림에는 Refresh Token이 없지만, Access Token을 발급 해 주면서 Refrsh Token 또한 같이 발급됨
- Access Token이 만료 될 시 Refresh Token을 사용하여 재로그인 없이 Access Token을 재발급
OAuth2.0 권한 부여 방식
1. Authorization Code Grant - 권한 부여 승인 코드 방식
- 권한 부여 승인 요청 시 response_type=code, grant_type=authorization_code으로 지정하여 요청하는 방식
- 가장 기본이 되는 방식
- Refresh Token 사용 가능
2. Implicit Grant - 암묵적 승인 방식
- 자격 증명을 안전하게 저장하기 힘든 클라이언트(ex: javascript)에게 최적화된 방식
- response_type = token으로 요청
- 권한 부여 승인 코드 없이 바로 Access Token이 발급
- 노출 위험 방지를 위해 일반적으로 만료기간을 짧게 설정함
- Refresh Token 사용이 불가능
- Access Token이 URL로 전달된다는 단점이 있음(위험)
3. Resource Owner Password Credentials Grant - 자원 소유자 자격증명 승인 방식
- 간단하게 username, password로 Access Token을 받는 방식으로 grant_type = password로 요청
- 클라이언트가 자신의 서비스에서 제공하는 어플리케이션일 경우에만 사용하는 방식
- Refrsh Token 사용 가능
4. Client Credentials Grant - 클라이언트 자격증명 승인 방식
- 클라이언트의 자격증명만으로 Access Token을 획득하는 방식으로 grant_type = client_credentials 로 요청
- 자격증명을 안전하게 보관할 수 있는 클라이언트에만 사용
- Refresh Token은 사용 불가능