1. OAuth?
OAuth 는 Open Authorization의 줄임말로,
인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준이다.
쉽게 말하자면 카카오나, 구글, 애플 등에서 유저 인증과 유저 정보를 제공 받는 인터넷 프로토콜의 종류라 생각하면 된다.
2. OAuth 배경
2006년 트위터, Ma.gnolia(소셜 북마크 사이트)는 OpenID를 활용함에 있어 서비스에 접속하는 인증방식을 필요로 하였는데
블레인 쿡, 크리스 메시나, 래리 하프, 데이비드 리코던은 OpenID를 활용해 트위터나 Ma.gnolia의 API로 인증을 위임하는 방법을 논의하였고 그 결과, API 접근 위임에 대한 공개 표준이 아직 존재하지 않는다는 결론에 도달하였다 한다.
OAuth의 인터넷 커뮤니티는 2007년 4월에 탄생하여, 소수 인원으로 새로운 공개 프로토콜의 초안을 썼다.
OAuth 프로젝트를 알게 된 구글의 드위트 클린턴은 지원을 표명했다.
2007년 7월, 팀은 사양 초안을 완성시켰다. 에런 해머래해브가 가세하여 많은 협력자들의 조정을 실시하여, 보다 정식적인 사양을 작성해나갔다. 2007년 10월 3일, OAuth 코어 1.0의 최종 초안이 발표되었다.
3. 용어
사용자 (User)
OAuth2를 통해 액세스를 요청하고자 하는 개인을 말합니다. 사용자는 리소스에 대한 액세스 권한을 부여하고 애플리케이션에 로그인하는 등의 활동을 수행합니다. (정보의 주인이기도 하기 때문에 Resource Owner 라고도 합니다.)
클라이언트 (Client)
OAuth2를 사용하여 사용자 데이터에 액세스하려는 애플리케이션 또는 서비스를 말합니다. 예를 들면 모바일 앱, 웹 애플리케이션, 데스크톱 애플리케이션 등이 클라이언트가 될 수 있습니다. (인증 또는 리소스 서버를 만드는 것이 아니라면 대부분은 만들고자 하는 서비스라고 생각하면 된다.)
리소스 서버 (Resource Server)
사용자 데이터를 보유하고 있는 서버를 말합니다. OAuth2에서는 이 서버가 보호되어야 할 리소스를 제공하고 관리합니다. 예를 들어, 소셜 미디어 플랫폼에서 사용자의 프로필, 사진 등을 저장하고 있는 서버가 리소스 서버가 될 수 있습니다.
인증 서버 (Authorization Server)
OAuth2 인증 프로세스의 중심 역할을 하는 서버입니다. 인증 서버는 클라이언트의 인증 및 액세스 토큰 발급을 관리합니다. 사용자의 인증 정보를 확인하고 액세스 권한을 부여하는 역할을 합니다.
액세스 토큰 (Access Token)
클라이언트가 리소스 서버에 접근할 수 있도록 하는 보안 토큰입니다. 액세스 토큰은 사용자의 인증 및 권한 부여를 대신하며, 제한된 기간 동안 유효합니다.
리프레시 토큰 (Refresh Token)
액세스 토큰이 만료되었을 때, 새로운 액세스 토큰을 얻기 위해 사용되는 토큰입니다. 리프레시 토큰은 액세스 토큰을 갱신하거나 새로 발급하는 데 사용됩니다.
범위 (Scope)
액세스 토큰이 유효한 리소스 및 작업의 범위를 정의하는 매개변수입니다. 클라이언트가 액세스 토큰을 요청할 때, 요청에 포함된 범위에 따라 허용된 작업을 수행할 수 있습니다. 예를 들어, "프로필 읽기" 또는 "사진 업로드"와 같은 범위가 될 수 있습니다.
4. 동작 방식
아래 이미지는 이해를 돕기 위해 PAYCO 에서 가져온 이미지이다.
OAuth2.0 인증 과정
1. 인증 요청 : 유저가 클라이언트(Your Service!)를 통해 로그인 과정
2. Authorization Code 발급 : 해당 인증 요청에 대한 코드 발급
3. Access Token 발급 : 일정 기간 인증 유효성을 나타네는 토큰 발행
4. Access Token 저장, 인증 완료 : 클라이언트에서 작업
OAuth2.0 프로세스
1. 사용자 : 해당 서비스를 사용하고자 하는 유저
2. 서비스 : 위 설명에서 클라이언트에 해당하고, 인증 서비스를 이용하고자 하는 서비스를 생각하면 된다
3. 인증 서비스 : Authorization Server 에 해당
4. API 서비스 : Resource Server 에 해당
위의 프로세스는 어떤 서비스든 OAuth2.0 규격에 맞게
거의 동일하거나 비슷한 프로세스로 진행이 된다. (카카오, 구글, 페이스북, 애플 등등)
그렇기에 웹 프레임워크에서도 간편하게 제공되거나,
직접 구현해야해는 경우에도 각 인증 서버의 개발 문서를 참고하면 구현 할 수 있다.
위 프로세스 이미지에서 10~13 과정이 Access Token 으로 이루어지기 때문에 인증 과정에서 받은 Access Token, Refresh Token 은 취급에 주의가 필요하다. (보안 처리 장치가 있기는 하지만 토큰 유효 기간 동안 정보가 유출될 가능성이 없지 않기 때문!)
추후 Spring Security OAuth 를 이용해서 구현하는 방법에 대해 포스팅 하겠다.
OAuth 에 대한 추가적인 궁금점이 있다면 아래 참고자료에서 OAuth Community Site 에서 확인하기 바란다.
(OAuth2.1 에 대한 내용도 있으니 참고!)
5. 참고자료
OAuth - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. OAuth("Open Authorization")는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여
ko.wikipedia.org
PAYCO 로그인 및 PAYCO 바로가입 개발 가이드
PAYCO 로그인 및 PAYCO 바로가입 개발 가이드, 간편로그인 SDK, 이미지 리소스를 제공합니다.
developers.payco.com
OAuth Community Site
For API developers... If you're supporting... web applications mobile applications server-side APIs mashups Use OAuth to let application developers securely get access to your users' data without sharing their passwords.
oauth.net
'DEV > Etc' 카테고리의 다른 글
[Etc] 셀레니움 크롬 드라이버 자동 설치(webdriver-manager) (0) | 2023.11.03 |
---|---|
[Etc] WebRTC 란? (0) | 2023.08.11 |
[Flask] Flask 란? (0) | 2023.08.03 |
Google 간편로그인 등록 (feat. OAuth) (0) | 2023.07.22 |
객체지향 프로그래밍 (OOP) (0) | 2023.03.29 |