OAuth 이전의 시대
OAuth 이전 시절에는 사소한 웹서비스를 사용하기 위해서 하루 종일 회원가입만 해야 됐던 시절이 있었다. 보안 관념도 매우 취약했기 때문에 (어느 정도였냐면 SQL-Injection 조차도 허용 되던 곳이 많던 시절이다) 사이트 해킹이나 개인정보 유출은 일상적인 시대였다. 뉴스만 크게 안나왔을 뿐이지 지금도 털리는 개인정보가 그 당시에 털리지 않았다는 것은 어불성설이다.
지금도 회원가입 절차를 하는 곳이 많은데, 이 경우에는 서비스사의 정보 수집의 욕구가 강하거나 OAuth에서의 정보제공이 제한적이기 때문에 추가 정보를 얻기 위해서 가입하는 경우가 있다.
OAuth가 보편화 되지 않았던 시절에는 key-base 요청이라던가 디지털 서명이라던가 쿠키와 세션 기반 인증이던가 기타 등등으로 서비스 간 인증을 했다고 한다. 하나 같이 보안에 취약하거나 사용하기 불편한 것들 이기 때문에 개발에 난항을 겪었을 것으로 예상된다.
OAuth가 뭔데?
OAuth("Open Authorization")는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준이다.
- 위키백과
간단히 말해서 내 서비스를 남의 서비스에 제공을 하고 싶은데 보안이 문제 됨으로 이를 편하게 해결 하기 위해 인증에 대해 위임을 시켜서 남의 서비스를 사용한다는 것이다.
이렇다보니까 SNS 들이 자신들의 유저를 잡아두고 데이터를 수집하는 수단으로 OAuth를 경쟁적으로 제공하기도 한다. 회원가입 자체가 서비스의 진입 장벽이 되기 때문에 신규 서비스를 제공하는 사업자의 입장에서도 OAuth를 사용하는 것이 서비스 진입 장벽을 낮추는 데에 도움이 된다.
OAuth 용어
사용자(user) | 서비스 제공자와 소비자를 사용하는 계정을 가지고 있는 개인 |
소비자(consumer) | Open API를 이용하여 개발된 OAuth를 사용하여 서비스 제공자에게 접근하는 웹사이트 또는 애플리케이션 |
서비스 제공자(service provider) | OAuth를 통해 접근을 지원하는 웹 애플리케이션(Open API를 제공하는 서비스) |
소비자 비밀번호(consumer secret) | 서비스 제공자에서 소비자가 자신임을 인증하기 위한 키 |
요청 토큰(request token) | 소비자가 사용자에게 접근권한을 인증받기 위해 필요한 정보가 담겨있으며 후에 접근 토큰으로 변환된다. |
접근 토큰(access token) | 인증 후에 사용자가 서비스 제공자가 아닌 소비자를 통해서 보호된 자원에 접근하기 위한 키를 포함한 값. |
OAuth 인증과정
표준으로 정의 된 Protocol Flow는 위와 같다. 물론 실제로 구현 해야되는 환경이나 RefreshToken 같은 Optional 같은 사항들이 포함이 되면 과정이 좀 더 추가 된다.
일반적으로 구현 되는 OAuth 서비스는 다음과 같다.
RFC 6749에 나와있는 Protocol Flow를 기준으로 실제 서비스에서 어떻게 구현이 되어야 하는지 설명을 하겠습니다.
1. Authorization Request 단계
현재 사용자는 소비자의 서비스를 이용을 하고 있고 서비스 제공자로 요청을 보내야 되기 때문에 소비자가 제공하고 브라우저를 통해 요청을 하면 Redirect URI를 받아서 서비스 제공자에게 요청을 하게 됩니다.
2. Authorization Grant 단계
서비스 제공자는 사용자로 부터 받은 요청이 올바른지 확인 합니다. 서비스 제공자는 필요하다면 사용자에게 필요한 인증, 인가 정보를 요청 할 수 있습니다. 정해져 있는 scope에 따라서 사용자에게 인가 정보를 부여를 하고 Auth Code를 전송합니다.
3. AccessToken 단계
소비자는 사용자로 부터 전달 받은 Auth Code를 기반으로 서비스 제공자에게 AccessToken을 요청합니다. 서비스 제공자는 유효성 검사를하고 소비자에게 응답을 합니다.
4.Protected Resource 단계
사용자는 소비자에게 서비스 제공자의 서비스를 포함하고 있는 요청을 하게 되면 소비자는 AccessToken을 기반으로 서비스 제공자에게 API 요청을 합니다. 이로써 사용자의 인증, 인가 정보를 이용하여 사용자에게 서비스를 할 수 있게 되었습니다.
'프로그래밍 > General Development Skills' 카테고리의 다른 글
cron expression 스케쥴 프로그래밍 (0) | 2024.03.22 |
---|---|
git을 막 사용하기 시작한 당신을 위한 몰라도 좋은 git의 기본 원리 (0) | 2024.02.26 |
Git 이전에는 어떻게 코드를 관리했을까? - 시대를 평정한 Git의 등장 (2) | 2023.11.14 |
Git이란 무엇인가? - 코드 형상관리를 위한 첫걸음 (1) | 2023.11.14 |