OAuth 란?
- OAuth는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준이다
- OAuth가 사용되기 전에는 인증방식의 표준이 없었기 때문에 기존의 기본인증인 아이디와 비밀번호를 사용하였는데, 이는 보안상 취약한 구조이다.
- OAuth를 이용하면 인증을 공유하는 애플리케이션끼리는 별도의 인증이 필요없다. 따라서 여러 애플리케이션을 통합하여 사용하는 것이 가능하게 된다.
용어 설명
- Resource Owner : 리소스의 권한을 가진 사용자. 사용자 혹은 유저(User)라고도 한다. ex) 나몰닭 유저
- Client : 리소스 서버에 접근을 요청하는 어플리케이션 혹은 웹 사이트. 즉, 서비스를 제공자이며 Third Party Application 라고도 한다. ex) 나몰닭이 여기에 해당
- Authorization Server : 액세스 토큰(Access Token)을 클라이언트에게 발급해주는 서버. 인가의 주체. ex) 카카오톡, 구글, 네이버 등
- Resource Server : Authorization Server가 발급한 액세스 토큰(Access Token)을 확인하고 리소스를 제공. API 서버. ex) 이름, 나이 등 아이디 관련 정보(리소스)를 제공하는 서버. 카카오톡, 구글, 페이스북, Github 등
- cf.) Authorization Server와 Resource Server를 묶어서 OAuth Provider라고도 한다.
- Client ID : 우리가 운영하는 애플리케이션을 식별하는 아이디
- Client Secret : Client ID에 대한 비밀번호 - 외부에 노출되어선 안된다.
- Authorized redirect URIs : Resource Server로 부터 Authorized code를 받을 주소
OAuth2.0 승인 방식(Grant Type)의 종류
Authorization Code Grant Type
- OAuth2.0 Grant Type에서 가장 잘 알려진 방식이며 중요한 보안 이점을 제공하는 방법
- 클라이언트가 사용자 대신 특정 리소스에 접근을 요청할 때 사용된다. 클라이언트는 Access Token을 발급 받기 전, 인가코드(Authorization Code)를 사용자에 의해 받게 되고, 그 인가코드(Authorization Code)를 가지고 인가 서버(Authorization Server)에 요청을 보내면 리소스에 대한 Access Token을 발급 받을 수 있다.
Implicit Grant Type
- Authorization Code Grant Type과 다르게, 인가코드(Authorization Code) 교환 단계 없이 Access Token을 즉시 반환받아 이를 인증에 이용하는 방식
Resource Owner Password Credentials Grant Type
- 클라이언트가 암호를 사용하여 Access Token에 대한 사용자의 자격 증명을 교환하는 방식
Client Credentials Grant Type
- 클라이언트가 컨텍스트 외부에서 Access Token을 얻어 특정 리소스에 접근을 요청할 때 사용하는 방식
OAuth 2.0 흐름
1. Resoruce Owner인 User가 Client를 통해서 인가(Authorization)를 시작한다.
2. Client는 User를 Authorization Server로 포워드 해준다.
3. Authorization Server는 User에게 로그인창을 제공하여 User를 인증한다.
4. User가 ID/Password를 입력하여 로그인 하면, Client가 Resource에 대한 접근 권한을 요청한다.
5. Authorization Server는 Authorization Code를 Client에게 제공해준다.
6. Client는 Authorization Code로 Authorization Server에 Access Token을 요청한다.
7. Authorization Server는 Client에게 Access Token을 발급해준다.
8. Access Token을 이용하여 Resource Server의 자원에 접근할 수 있게 된다.
9. 이후 Access Token이 만료되면 Refresh Token을 이용하여 Access Token을 재발급 받을 수 있다.
[ 참고 자료 ]
https://thatisgood.tistory.com/entry/OAuth20-OAuth20-%EC%9D%B4%EB%A1%A0-%EC%A0%95%EB%A6%AC-01
https://opentutorials.org/course/3405
https://data-jj.tistory.com/53
'항해99 개발 일지 > [Final] 실전 프로젝트' 카테고리의 다른 글
[22] ubuntu 서버에 Redis 설치하기 (0) | 2023.01.26 |
---|---|
[20] Spring CI/CD (2) CI 실전편 (0) | 2023.01.25 |
[18] 3주차 중간 발표 피드백 정리 (0) | 2023.01.22 |
[17] Refresh Token 완전 정리 ! (0) | 2023.01.22 |
[16] Docker 실행 / 명령어 정리 (0) | 2023.01.19 |