반응형
OAuth 2.0
"Open Authorization(인가/권한 부여)"을 뜻하며, 웹 사이트나 애플리케이션이 사용자 대신 다른 웹 앱에서 호스팅 하는 리소스에 접근할 수 있도록 설계된 표준이다.
OAuth 2.0은 사용자의 자격증명 없이 허가된 액세스를 제공하거나, 특정 리소스에 대한 접근을 제한할 수 있다.
OAuth 2.0의 기본 개념
OAuth 2.0은 인증 프로토콜(authentication protocol)이 아니라 권한 부여 프로토콜(authorization protocol)이다. 따라서 원격 API 또는 유저 정보와 같은 리소스들에 액세스 권한을 부여하는 수단으로 설계되었다.
OAuth 2.0는 액세스 토큰(Access Token)을 사용하는데, 이 액세스 토큰은 사용자 대신 리소스에 액세스 할 수 있는 권한을 나타내는 데이터 조각이다. 액세스 토큰의 사용은 특정 형식에 구애받지 않는다. 하지만 몇몇 실행 환경에서는 JWT(JSON Web Token)이 주로 사용된다.
액세스 토큰을 발행하면 발행인은 토큰 자체에 데이터를 넣을 수 있다. 보안 이슈가 있는 경우 액세스 토큰에 만료일이 있을 수 있다.
OAuth 2.0에서 Role(역할)의 개념
Role은 OAuth 2.0 인증 프레임워크를 구성하는 중요한 개념이다.
각 역할의 상호작용을 통해 인증/인가 작업을 수행한다.
Resource Owner
자원을(Resource) 가지고 있는 사람(Owner).
서비스를 이용하는 유저(사용자). (개인정보와 같은)민감한 정보를 가지고 있으며 해당 정보에 대한 외부의 액세스 요청에 응답한다.
ex) 서비스 이용자
Client
특정 자원에 대한 액세스 요청을 하는 시스템(개발자가 만든 서비스 혹은 App).
액세스 요청을 위해 Client는 반드시 액세스 토큰을 가지고 있어야 한다.
ex) 개인 혹은 회사가 개발한 서비스나 App
Resource Server
사용하고자 하는 자원을(Resource) 가지고 있는 서버(Server).
사용자의 자원을 보호하고 Client로부터 액세스 요청을 수신한다.
Client로부터 유효한 액세스 토큰을 받고, 요청에 맞는 자원을 전달한다.
ex) Google, Naver, Kakao
Authorization Server
인증과 관련된 요청 처리를 전담하는 서버.
Client로부터 액세스 토큰 발행 요청을 수신하고, 권한 체크 및 사용자(Resource Owner) 동의에 따라 액세스 토큰을 발행한다.
OAuth 2.0 Scope
Scope는 Client의 요청에 어느정도 범위의 자원을 제공하는가 판별하는 기준이다.
요청에 따른 '적절한 자원'의 기준은 이를 제공하는 Resource Server의 지침을 따른다.
OAuth 2.0 Access Token and Authorization Code
OAuth 2.0 인증 서버는 Resource Owner가 액세스 권한을 얻었다고 해서 곧바로 액세스 토큰을 전달하지 않는다.
대신, 보안을 위해 액세스 코드 대신 Authorization Code가 반환될 수 있다.
추가로, 인증 서버는 액세스 토큰으로 Refresh Token을 발행할 수도 있다. Refresh Token은 액세스 토큰과는 다르게 자체 수명이 길고, 수명이 다한 다른 토큰을 대신하기도 한다.
OAuth 2.0 동작 원리
- Client가 Authorization Server에 client id/secret을 식별자로 하여 권한 요청을 한다. 또한 요청 범위(scope)와 액세스 코드 또는 Authorization Code를 보낼 리디렉션 URI를 전달한다.
*리디렉션 URI: Resource Server가 응답을 전달하기 위해 사용하는 URI. - Authorization Server는 Client를 인증하고 요청받은 scope가 허용되는지 확인한다.
- Resource Owner는 Authorization Server와 상호작용하여 액세스를 승인한다.
- Authorization Server는 권한 부여 유형에 따라 Authorization Code 또는 액세스 토큰을 Client에게 전달한다.
- Authorization Code 또는 액세스 토큰을 받은 Client는 Resource Server에 자원 접근 요청을 한다.
인증(Authentication) 그리고 인가(Authorization) 이렇게 고정된 의미로 받아들이고 개념을 공부하려니 쉽게 와닿지 않는다. 해당 용어가 가지는 명확한 뜻을 이해하는 것도 중요하지만, 그것에 너무 매몰되다 보면 "그래서 OAuth 2.0을 사용해야 하는 이유는 무엇인가?"라는 공부에 대한 최초의 동기를 망각하게 된다. 결국 해당 개념을 익히고 기술을 사용해서 안정적인 서비스를 구현하는 것이 최종 목표인 만큼 용어 하나 하나에 대한 지나친 집착은 삼가하자.
그래서 인증과 인가를 간단히 구분하자면,
Authentication(인증)
- 신원 확인
Authorization(인가)
- (신원 확인 완료 후)권한 확인
참고
반응형
'Programming > OAuth2.0' 카테고리의 다른 글
[OAuth 2.0] Refresh Token (0) | 2021.09.09 |
---|