인증
사용자 인증은 서버와 클라이언트의 통신 사이에서 상대방, 보통은 사용자의 신원을 확인하는 매우 중요한 단계다. 대부분의 웹/앱 서비스는 사용자 인증을 위해 아이디, 비밀번호 등의 조합을 통해 사용자의 신원을 확인한다. 웹사이트에서 페이지를 이동하는 행위는 완전히 새로운 요청을 서버에 보내는 행위이기 때문에 어떤 사용자의 요청인지는 매번 확인해야 한다. 이 때 페이지를 이동할 때 마다 아이디, 비밀번호를 받는 것은 사용성을 해치기 때문에 보통 두 가지 방법을 통해 사용자 인증을 처리한다
- Session 기반 인증
- Token 기반 인증
여기서 OAuth 는 Token 기반 인증 방식이다.
Session 기반 인증 방식
사용자가 로그인을 하게 되면 서버의 메모리에 세션이 저장된다. 식별자인 Session ID는 사용자의 브라우저에 쿠키로 저장된다. 브라우저는 쿠키에 담겨있는 Session ID를 모든 요청에 마다 보내게 되고, 서버에서 Session ID 를 가지고 Session 의 유효성을 판단하여 인증을 수행한다.
Token 기반 인증 방식
Token 기반의 인증 방식은 사용자가 로그인을 하게 되면 서버는 Token 을 발급하고, 사용자는 이 Token 을 저장해둔다. 매 요청시 마다 Token 을 Header 에 함께 전송하고, 서버는 이 Token 의 유효성을 판단하여 인증을 수행한다.
용어
- 사용자(user): 서비스 제공자와 소비자를 사용하는 계정을 가지고 있는 개인
- 소비자(consumer): Open API를 이용하여 개발된 OAuth를 사용하여 서비스 제공자에게 접근하는 웹사이트 또는 애플리케이션
- 서비스 제공자(service provider): OAuth를 통해 접근을 지원하는 웹 애플리케이션(Open API를 제공하는 서비스)
- 소비자 비밀번호(consumer secret) : 서비스 제공자에서 소비자가 자신임을 인증하기 위한 키
- 요청 토큰(request token) : 소비자가 사용자에게 접근권한을 인증받기 위해 필요한 정보가 담겨있으며 후에 접근 토큰으로 변환된다.
- 접근 토큰(access token) : 인증 후에 사용자가 서비스 제공자가 아닌 소비자를 통해서 보호된 자원에 접근하기 위한 키를 포함한 값.
출처 : 위키백과 (https://ko.wikipedia.org/wiki/OAuth)
OAuth 1.0
OAuth 1.0 은 다음과 같은 절차로 진행된다.
- 서버에 Request Token 요청
- 사용자 인증 페이지 호출
- 사용자 로그인 완료
- 사용자의 권한 요청 및 수락
- Access token 발급
- Access token 을 이용한 서비스 호출
OAuth 1.0 ? OAuth 1.0a ?
OAuth1.0 스펙 문서를 보면 1.0 은 보안상의 이유로 2009년 6월 24일 OAuth 1.0a 로 대체되었다. 그리고 OAuth 1.0a는 IETF의 draft-hammer-oauth 문서로 대체되었고, RFC로 출판하기 전 IESG의 승인을 기다리는 중이다.
This specification was obsoleted by OAuth Core 1.0 Revision A on June 24th, 2009 to address a session fixation attack. The OAuth Core 1.0 Revision A specification is being obsoleted by the proposed IETF draft draft-hammer-oauth. The draft is currently pending IESG approval before publication as an RFC.
https://oauth.net/core/1.0/
OAuth Core 1.0
[RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., Masinter, L., Leach, P., and T. Berners-Lee, “Hypertext Transfer Protocol – HTTP/1.1,” RFC 2616. [RFC2617] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., Leach, P., Luotonen, A.
oauth.net
결국 현재는 1.0a 를 쓰거나 2.0을 쓰는 상황이 되었다. 각 업체마다 쓰는 OAuth 버전은 여기서 확인할 수 있다. https://en.wikipedia.org/wiki/List_of_OAuth_providers
List of OAuth providers - Wikipedia
From Wikipedia, the free encyclopedia Jump to navigation Jump to search Wikipedia list article List of notable OAuth service providers. Service provider OAuth protocol OpenID Connect Amazon 2.0[1] AOL 2.0[2] Autodesk 1.0,2.0[3] Apple 2.0[4] Yes Basecamp 2.
en.wikipedia.org
Session fixation security flaw in OAuth 1.0
1.0의 결함이었던 Session fixation 은 다음(https://venova.tistory.com/entry/Session-Fixation-Attack) 문서에서 다룬다.
OAuth 1.0a
OAuth 1.0a vs OAuth 2.0
OAuth 2.0
'코딩 > 모음' 카테고리의 다른 글
[AWS] EC2 인스턴스 지키기 (나도모르는 사이에 인스턴스가 삭제된다) (0) | 2022.01.23 |
---|---|
[Google Play] Issue: Need login credentials for app review (리뷰용 계정 미제공으로 인한 앱 삭제) (0) | 2021.12.25 |
Session Fixation Attack (0) | 2021.05.30 |
[SQL] PostgreSQL Join 에 대해서 (0) | 2021.05.16 |