OAuth 2.0 (Open Authorization 2.0)
웹이나 어플리케이션에서 사용자에게 권한을 부여하는 개방형 표준 프로토콜
제3의 서비스(우리 서비스)가 사용자 리소스에 접근하기 위한 절차를 정의하고, 사용자에게 제3의 서비스를 사용할 수 있는 권한을 부여한다.
Naver, Kakao, Google, Github 등의 소셜 미디어 간편 로그인
개발자 관점
: 인증, 인가 절차를 구현하지 않아도 사용자 정보를 얻을 수 있다.
사용자 관점
: 개인정보(특히 비밀번호)를 제공하지 않아도 제3의 서비스를 이용할 수 있다.
OAuth 2.0 구성 요소
1) 리소스 소유자(Resource Owner)
2) 클라이언트(Client)
3) 권한 서버(Authorization Server)
4) 리소스 서버(Resource Server)
OAuth 2.0 사용 데이터
1) 액세스 토큰(Access Token)
2) 리프레시 토큰(Refresh Token)
3) 범위(Scope)
4) 인가 코드(Authorization Code)
액세스 토큰을 곧바로 발급하지 않고 인가 코드를 부여하는 이유는?
- 액세스 토큰이 프론트 단에 노출되면 데이터 탈취 위험성이 커지기 때문이다.
- 권한 서버는 클라이언트의 정보가 올바른 경우 Redirect Uri로 인가 코드를 반환한다.
이때, 프론트 단에 인가 코드가 노출되므로 쉽게 탈취가 가능해진다.
만약 인가 코드가 아닌, 액세스 토큰을 반환했다면 사용자 정보를 보호하기 힘들 것이다.
따라서 보안성을 높이기 위해 인가 코드를 이용하여 액세스 토큰을 발급하는 것이다.
프론트 단에서 바로 액세스 토큰을 요청할 수 있는 Implicit OAuth 2.0이 있지만 추천하지 않는다.
OAuth 2.0 권한 부여 과정
- 인가 코드 받기
1) 나는 프로그래머스 로그인 창에서 네이버 로그인을 시도한다.
2) 프로그래머스가 네이버에 인가 코드를 받기 위하여 요청을 보낸다.
3) 네이버가 나한테 네이버 계정 로그인을 요청한다.
4) 나는 네이버 계정으로 로그인을 하고 프로그래머스가 개인정보를 이용하는 것에 동의한다.
5) 네이버가 프로그래머스에게 인가 코드를 반환해준다.
- 토큰 발급 받기
1) 프로그래머스는 클라이언트 아이디, 시크릿 코드, 인가 코드, Redirect Uri을 사용하여 네이버에 액세스 토큰 발급 받기를 요청한다.
2) 올바른 요청일 경우 네이버가 프로그래머스에게 액세스 토큰을 발급한다.
3) 프로그래머스는 액세스 토큰을 사용하여 '나'의 정보에 접근할 수 있게 된다.
OAuth 1.0 vs OAuth 2.0
1) 구성 요소
2) 토큰 발급
Request Token
이 필요하며 이 토큰을 만들기 위해 Signature
등의 파라미터가 요구됨 (이때 Signature 생성 과정이 매우 복잡하다고 함)Authorization Code
가 필요하며 이 코드를 만들기 위해 Cliend id
, Request URL
이 파라미터로 요구됨3) 토큰 만료
Refresh Token
사용4) 사용자 정보 접근
5) 지원 유형
장단점
1) 장점
2) 단점
참고