OAuth를 왜 쓸까
OAuth를 왜 쓸까? 하고 생각해보기 전에 네이버 로그인이나 카카오 로그인을 왜 사용할까? 네이버 로그인이나 카카오 로그인을 쓰는 데에는 여러가지 이유가 있을 수 있다. 나의 경우에는 유저들에게 회원가입/로그인을 쉽게 제공하기 위해 이번 프로젝트에서 카카오 소셜로그인을 구현했다.
그렇다면 내가 만든 사이트에서 카카오 소셜로그인을 사용하려는 유저가 카카오톡을 사용하는 사람인지는 어떻게 알 수 있을까?? 이걸 해결하기 위해 OAuth가 생겼다.
OAuth 란?
- Open Authorization
- 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준이다.
쉽게 말해, 다양한 플랫폼에서 권한 부여를 위한 산업 표준 프로토콜이다.
OAuth 탄생 배경
OAuth 방식이 등장하기 전에는 인증방식의 표준이 없었기 때문에 기존의 기본인증인 id 와 password 를 사용하였었다
id와 password를 직접 입력받아 저장하여 필요할 때마다 불러와서 사용을 해야 했는데, 이런 방식을 사용하게 되면 다음과 같은 문제가 발생할 수 있다
- 사용자: 내가 만든 사이트에 다른 사이트의 id와 password를 공개하는 것에 대해서 신뢰할 수 없다
- 내가 만든 사이트: id와 password를 받았기에 보안 문제가 생기는 경우 모든 책임을 져야한다
- 다른 사이트 (google, naver): 내가 만든 사이트를 신뢰할 수 없다
위와 같은 문제를 해결하기 위해 2006년 11월 트위터 개발자와 Ma.gnolia의 개발자가 안전한 인증방식에 대한 논의를 하면서 OAuth가 등장했고,
2007년 10월 3일, OAuth 코어 1.0의 최종 초안이 발표되었다.
현재는 OAuth 1.0a를 거쳐 OAuth2.0이 많이 사용되고 있다
OAuth2.0 용어
Resource Server | OAuth 2.0 서비스를 제공하고, 자원을 관리하는 서버 (Facebook, Google, Twitter 등이 이에 속한다) |
Resource Owner (자원 소유자) | Resource Server의 계정을 소유하고 있는 사용자 (사용자) |
Client | Resource Server의 API를 사용하여 데이터를 가져오려고 하는 사이트 (내가 만든 사이트) |
Authorization Server (권한 서버) | Client가 Resource Server의 서비스를 사용할 수 있게 인증하고 토큰을 발행해주는 서버 (인증 서버) |
OAuth2.0 인증 흐름도
A. Client 측에서 Resource Owner에게 인증방식 4가지 중 하나로 승인을 요청한다
B. Resource Owner 측에서 Client 측으로 인증 권한을 부여한다
C. Client는 부여받은 인증 권한으로 Authorization Server에 Access Token 을 요청한다
D. Authorization Server에서 Client와 부여 받은 인증 권환에 대한 유효성을 검사 후 통과하면 Access Token 을 부여한다
E. Client는 받아온 Access Token 을 이용하여 Resource Owner의 Resource에 접근을 요청한다
F. Resource Server는 해당 Access Token 의 유효성을 검사한 후 통과하면 요청에 대한 Resource를 Client에게 넘겨준다
OAuth2.0 인증 절차 종류
- 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 Grant
OAuth1.0과 OAuth2.0의 차이
비교OAuth1.0OAuth2.0참여자구분 | 이용자 소비자 서비스 제공자 |
자원 소유자 클라이언트 권한 서버 자원 서버 |
토큰 | 요청 토큰 (Request Token) 접근 토큰 (Access Token) |
접근 토큰 (Access Token) 재발급 토큰 (Refresh Token) |
유효기간 | 접근 토큰의 유효기간 없음 | 접근 토큰 유효기간 부여 만료 시 재발급 토큰 이용 |
클라이언트 | 웹 서비스 | 웹, 앱 등 |
이렇게 OAuth를 통해 내가 만든 사이트를 사용하려는 유저가 자신의 카카오 계정과 비밀번호를 우리 사이트에 알려주지 않아도, 카카오에 있는 유저의 정보를 내가 만든 서비스에서 안전하게 사용할 수 있다.
https://datatracker.ietf.org/doc/html/rfc6749
https://doqtqu.tistory.com/295#toc-%C2%A0OAuth(Open%20Authorization)%EB%9E%80?%C2%A0
https://programmer93.tistory.com/52
'CS' 카테고리의 다른 글
Object Oriented Programming 객체 지향 프로그래밍 (0) | 2023.01.02 |
---|---|
[SQL] WHERE 1=1 (0) | 2022.12.31 |
파싱(Parsing)이란 무엇인가 (0) | 2022.12.30 |
[Network] 인터넷 네트워크 구조 (IP,TCP,UDP,DNS,PORT) (0) | 2022.12.30 |
mysql-basic-command (0) | 2022.09.13 |