1. OAuth 2.0의 개념
- 웹 및 어플리케이션 인증 및 권한 부여를 위한 개방형 표준 프로토콜이다.
- 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹 사이트 상의 자신들의 정보에 대해 웹사이트나 어플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는 접근 위임을 위한 개방형 표준이다.
- third-party 어플리케이션이 사용자의 리소스에 접근하기 위한 절차를 정의하고 서비스 제공자의 api를 사용할 수 있는 권한을 부여하였다
third-party 어플리케이션은 OAuth를 통해 사용자의 소셜 미디어 프로필 정보에 접근할 수 있다, - 네이버, 구글, 카카오와 같은 소셜 미디어 간편 로그인이 있다.
2. 구성 역할
- 리소스 소유자(resource owner)
- OAuth 2.0프로토콜을 사용해 보호되는 리소스에 대한 엑세스 권한을 부여하는 사용자(엔티티)이다.
- 네이버 아이디를 통해 소셜 로그인 인증을 하는 사용자처럼 클라이언트를 인증하는 역할을 수행한다.
- 클라이언트(client)
- OAuth2.0을 사용해 리소스에 접근하려고 하는 third-party 어플리케이션이나 서비스이다.
- 권한 서버(authorization server)
- 클라이언트가 리소스 소유자의 권한을 얻을 수 있도록 도와주는 서버이다.
- 사용자 인증, 권한 부여 및 토큰 발급을 관리한다.
- 리소스 서버(resource server)
- 보호되는 리소스를 호스팅하는 서버로 엑세스를 허용하거나 거부할 수 있다.
- OAuth2.0 토큰을 사용해 클라이언트에게 리소스에 엑세스 할 권한을 부여하고 실제 데이터를 제공한다.
3. 용어
- 엑세스 토큰(access token)
- 클라이언트가 리소스 서버의 리소스에 접근하기 위한 권한을 부여받는 토큰이다.
- 클라이언트가 갖고 있는 실제 유저의 정보가 담긴 토큰으로 클라이언트에서 요청이 오면 서버에서 해당 토큰에 있는 정보를 활용해 사용자 정보에 맞게 응답을 진행한다.
- 권한 서버로부터 발급되고 일반적으로 제한된 유효기간을 갖고 있다.
- 리프레시 토큰(refresh token)
- 엑세스 토큰의 유효기간이 만료되면 새로운 엑세스 토큰을 받기 위한 토큰이다.
- 사용자는 재로그인할 필요 없이 리프레시 토큰 유효 시간 갱신만으로 계속 어플리케이션을 사용할 수 있다.
- 범위(scope)
- 클라이언트가 리소스에 대한 어떤 작업을 수행할 수 있는지를 정의하는 문자열이다.
- 권한 서버에 의해 정의되고 클라이언트는 특정 범위의 엑세스 권한을 요청할 수 있다.
- 인증 코드(authorization code)
- 클라이언트가 엑세스 토큰을 얻기 위한 중간 단계로 사용되는 코드이다.
- 인증 코드 부여 방식(authorization code grant)을 통해 권한 서버로부터 발급되고 이를 사용해 엑세스 토큰과 리프레시 토큰을 얻을 수 있다.
4. 등장 배경
- OAuth가 등장하기 이전에는 보안 인증 방식에 대한 표준이 없어 웹 기반의 서비스를 제공하는 기업들이 독자적인 방법으로 인증처리를 진행하였다.
- 웹이 발전하는 과정에서 분산된 각 서비스들이 서로 의존하고 open api등을 통해 서비스들끼리 정보를 공유하는 상황으로 발전하게 되면서 다른 기업과 개인, 다른 서비스끼리 서로 정보를 공유하기 위해 대부분 인증이라는 보안 검증 절차가 이루어져야 했다.
- 기업들이 각자 독자적인 방식의 인증 수단을 사용했기 때문에 서로 다른 인증 처리를 위해서 많은 보안 문제점이 발생했다.
- 이를 해결하기 위해 OAuth 2.0이 등장한 것!!
5. OAuth 2.0 권한 부여 과정
1) 인증 코드 요청
클라이언트가 사전에 권한 서버로부터 발급한 클라이언트 ID, redirect_url 정보와 함께 response_type을 code로 지정해 요청한다.
2) 로그인
권한 서버에서 로그인 페이지를 제공하고 리소스 소유자가 로그인한다.
3) 인증 코드 전달
로그인에 성공하면 궈한 서버는 전달받은 redirect_url로 인증 코드를 전달한다.
4) 엑세스 토큰 발급
클라이언트가 권한 부여 승인코드를 통해 엑세스 토큰 및 리프레시 토큰을 발급 받는다.
이 때, 사전에 권한 서버로부터 발급한 클라이언트 id와 클라이언트의 시크릿 정보가 필요하다.
6. 인증과정 자세히 살펴보기 - 페이코의 OAuth 로그인 과정
1) 소셜 로그인 버튼을 클릭해 사용자가 서비스에게 서비스 접근 및 로그인 요청을 한다.
2) 서비스가 authorization server에 사용자 대신 로그인을 요천한다.
3) authorization server가 사용자에게 로그인 페이지를 제공한다.
4) 사용자가 ID, PW를 입력해 authorizatoin server에 요청해 유효성을 확인한다.
5) 유효성 확인이 되면 authorization server에서 사용자에게 authorization code를 발급한다.
6) 사용자가 서비스에게 redirect callback url로 발급받은 authoirzation code를 발급한다.
7) 서비스가 사용자에게 전달받은 authorization code를 사용해 authorization server에 인증 요청을 하면서 access token 발급 요청을 한다.
8) authorization server에서 해당 authorization code를 검증 후 인증해 access token을 발급하고, 서비스에서는 발급받은 access token을 저장한다
9) 서비스에서 사용자의 인증을 완료하고 로그인 성공 처리를 한다.
10-13) resource server로 발급받은 access token을 사용해 사용자의 해당 resource(id, 프로필 정보, 전화번호…)를 요청해 응답받을 수 있다.
[참고 자료]
'Spring' 카테고리의 다른 글
Spring Security의 인증 과정과 주요 모듈 (0) | 2024.04.08 |
---|---|
Spring Security의 개념과 Spring Security Filter Chain (0) | 2024.04.04 |
토큰(Token)과 JWT (1) | 2024.03.28 |
쿠키(Cookie)와 세션(Session) (0) | 2024.03.27 |
[인프런 워밍업 클럽] 미니프로젝트 1단계 (0) | 2024.03.04 |