OAuth(Open Authorization)란?
자신이 소유한 리소스에 소프트웨어 애플리케이션이 접근할 수 있도록 허용해 줌으로써 접근 권한을 위임해주는 개방형 표준 프로토콜
OAuth 탄생 배경
OAuth이 등장하기 전에 A 사이트에서 B 사이트의 리소스를 가져오기 위해서는 다른 사이트의 ID와 Password를 직접 입력 받아 저장하여 필요할 때마다 불러와서 사용을 해야했다. 위와 같은 방식을 사용하게되면 다음과 같은 문제가 발생한다.
- 사용자 : A 사이트에 B사이트의 ID와 Password를 넘겨주는 것에 대해 신뢰할 수 없다.
- A 사이트 : ID와 Password를 받았기 때문에 보안 문제가 생기는 경우 모든 책임을 져야한다.
- B 사이트 : A 사이트를 신뢰할 수 없다.
위와 같은 문제를 해결하기 위해 2006년 트위터 개발자와 Gnolia의 개발자가 안전한 인증방식에 대한 논의를 하면서 OAuth가 등장했고 2010년에 OAuth1.0이 발표되었다. 현재는 OAuth의 세션 고정 공격을 보완한 OAuth 1.0a를 거쳐, OAuth의 구조적인 문제점을 해결하고, 핵심요소만을 차용한 유사 프로토콜 WRAP(Web Resource Access Protocol)을 기반으로 발표한 OAuth 2.0가 많이 사용되고 있다.
OAuth2.0 용어
Resource Server | OAuth2.0 서비스를 제공하고 자원을 관리하는 서버 (보통 google, naver 같은 다른 사이트) |
Resource Owner(자원 소유자) | Resource Server의 계정을 소유하고 있는 사용자 (사용자) |
Client | Resource Server의 API를 사용하여 데이터를 가져오려고 하는 사이트 (개발 사이트) |
Authorization Server(권한 서버) | Client가 Resource Server의 서비스를 사용할 수 있게 인증하고 토큰을 발생해주는 서버 (인증 서버, google, naver) |
Access Token | 자원 서버에 자원을 요청할 수 있는 토큰 |
Refresh Token | 권한 서버에 접근 토큰을 요청할 수 있는 토큰 |
인증 절차 종류
종류(Type) | 설명 |
Authorization Code Grant | - Client가 다른 사용자 대신 특정 리소스에 접근을 요청할 때 사용 - 리소스 접근을 위해, Authorization Server에서 받은 권한 코드로 리소스에 대한 액세스 토큰을 받는 방식 - 다른 인증 절차에 비해 보안성이 높기에 주로 사용된다. |
Implicit Grant | - Authorization Code Grant과 다르게 권한 코드 교환 단계가 없음 - 액세스 토큰을 즉시 반환받아 이를 인증에 이용하는 방식 |
Resource Owner Password Credentials Grant | - Client가 암호를 사용하여 액세스 토큰에 대한 사용자의 자격 증명을 교환하는 방식 - Resource Owner에서 ID, Password를 전달 받아 Resource Server에 인증하는 방식으로 신뢰할 수 있는 Client야 가능 |
Client Credentials Grant | - Client가 컨텍스트 외부에서 액세스 토큰을 얻어 특정 리소스에 접근을 요청할 때 사용하는 방식 |
Authorization Code Grant
Implicit Grant
Resource Owner Password Credentials Grant
Client Credentials Credentials
OAuth1.0과 OAuth2.0의 차이
비교 | OAuth1.0 | OAuth2.0 |
참여자 구분 | - 이용자 - 소비자 - 서비스 제공자 |
- 자원 소유자 - 클라이언트 - 권한 서버 - 자원 서버 |
토큰 | - 요청 토큰(Request Token) - 접근 토큰(Access Token) |
- 접근 토큰(Access Token) - 재발급 토큰(Refresh Token) |
유효기간 | 접근 토큰의 유효기간 없음 | - 접근 토큰 유효기간 부여 - 만료 시 재발급 토큰 이용 |
클라이언트 | 웹 서비스 | 웹, 앱 등 |
참고 자료 :
반응형
'BackEnd > Server' 카테고리의 다른 글
Node.js와 Spring 비교 (0) | 2021.09.17 |
---|---|
[RESTful] API 설계 PUT vs PATCH (0) | 2021.08.24 |
[JWT] JWT(JSON Web Token)의 저장 위치 비교 (0) | 2021.08.22 |
[JWT] JWT(JSON Web Token) 설명 및 구조 (0) | 2021.08.21 |
[JWT] 서버 기반 인증 vs 토큰 기반 인증 (0) | 2021.08.20 |
댓글