IT 개발노트
OAuth 2.0 이란? 본문
내가 어떠한 서비스를 사용자에게 제공한다고 가정하자.
그렇다면 스스로 애플리케이션 서버를 구축 및 로그인 및 회원가입 서비스를 구현하기위해 사용자로부터 개인정보를 받아 저장하고 관리해야 할 것이다.
하지만 OAuth 2.0을 사용한다면 대부분의 로그인, 개인정보 관리 책임을 서드파티 애플리케이션 (Google, Facebook, Kakao 등)에게 위임할 수 있다. (단, 사용자가 기존에 서드파티 서비스에 회원가입이 되어있어야 함)
더 추상적으로 생각해보면 하나의 A라는 애플리케이션만 가입한다면 다양한 애플리케이션에서 각각 사용자가 권한을 부여 받을 필요 없이 A 애플리케이션으로 부터 부여 받은 권한을 다양한 애플리케이션에서 행사 할 수 있다.
예시로는 내가 만든 애플리케이션에서 사용자가 Kakao 로그인을 통해 로그인했다면 사용자가 넘겨준 토큰으로 Kakao Resource 서버로부터 해당 사용자의 프로필 정보 등을 조회할 수 있다.
OAuth 2.0 요소
구분 | 설명 |
Client | OAuth 2.0을 사용해 서드파티 로그인 기능을 구현할 자사 또는 개인 애플리케이션 서버다. |
Recource Owner | 서드파티 애플리케이션 (Google, Facebook, Kakao 등)에 이미 개인정보를 저장(회원가입)하고 있으며 Client가 제공하는 서비스를 이용하려는 사용자, 'Resource' 는 개인정보라고 생각하면 된다. |
Resource Server | 사용자의 개인정보를 가지고있는 애플리케이션 (Google, Facebook, Kakao 등) 서버다. Client는 Token을 이 서버로 넘겨 개인정보를 응답 받을 수 있다. |
Authorization Server | 권한을 부여(인증에 사용할 아이템을 제공주는)해주는 서버다. 사용자는 이 서버로 ID, PW를 넘겨 Authorization Code를 발급 받을 수 있다. Client는 이 서버로 Authorization Code을 넘겨 Token을 발급 받을 수 있다. |
출처: PAYCO 개발자 센터
시퀀스 다이어그램에는 refresh token이 없지만 보통 Authorization Server로 부터 access token(비교적 짧은 만료기간을 가짐) 과 refresh token(비교적 긴 만료기간을 가짐)을 함께 부여 받는다.
access token은 보안상 만료기간이 짧기 때문에 얼마 지나지 않아 만료되면 사용자는 로그인을 다시 시도해야한다. 그러나 refresh token이 있다면 access token이 만료될 때 refresh token을 통해 access token을 재발급 받아 재 로그인 할 필요없게끔 한다.
OAuth 2.0과 JWT의 목적과 차이
OAuth 2.0는 하나의 플랫폼의 권한(아무 의미없는 무작위 문자열 토큰)으로 다양한 플랫폼에서 권한을 행사할 수 있게 해줌으로써 리소스 접근이 가능하게 하는데 목적을 두고있다.
JWT는 Cookie, Session을 대신하여 의미있는 문자열 토큰으로써 권한을 행사할 수 있는 토큰의 한 형식이다. (로그인 세션이나 주고받는 값이 유효한지 검증할 때 주로 쓰인다.)
OAuth 2.0 에서 의미없는 정보를 가지는 토큰이 의미있는 정보를 가져야한다면 두 기술을 혼합하여 access token 을 JWT 형식으로 구현할 수도 있다.
OAuth 1.0과 OAuth 2.0 차이
비교 | OAuth1.0 | OAuth2.0 |
참여자 구분 | - 이용자 - 소비자 - 서비스 제공자 |
- 자원 소유자 - 클라이언트 - 권한 서버 - 자원 서버 |
토큰 | - 요청 토큰(Request Token) - 접근 토큰(Access Token) |
- 접근 토큰(Access Token) - 재발급 토큰(Refresh Token) |
유효기간 | 접근 토큰의 유효기간 없음 | - 접근 토큰 유효기간 부여 - 만료 시 재발급 토큰 이용 |
클라이언트 | 웹 서비스 | 웹, 앱 등 |
보안 검수 항목
OAuth의 경우 취약점이 발생하면 사용자 계정 탈취로 이어지기 때문에 적용 및 구현할 때 보안에 좀 더 신경을 써서 진행해야한다.
Oauth 2.0 보안 검수 항목 | 검수 방법 | |
1 | Authorization code 등 OAuth 인증 flow 에서 중요 정보 탈취 가능 여부 | SSL/TS 적용, 누락 여부 확인 |
2 | 위조 Client에 의한 Authorization code 유출 가능 여부 | Client를 검증에 사용되는 Client secret 값에 대한 보안 현황과 검증 과정에 공격 가능 여부 확인 1. 안전한 엔트로피(128bit) 확보 여부 2. 브루트포싱 가능 여부 |
3 | Redirect URI를 이용한 Authorization code 또는 Access Token 탈취 가능 여부 | Redirect URI 검증 여부와 방법에 대해 공격 가능 여부 확인 |
4 | CSRF를 통한 계정 탈취 가능 여부 | state 값에 대한 정책과 사용 여부, 방법에 대해 공격 가능 여부 확인 |
5 | 반복된 권한 요청을 통해 Authorization server에 DOS (Denial Of Service) 공격 가능 여부 | Authorization code를 발급 시 패킷 재전송을 통해 반복적으로 발급 가능 여부 |
6 | Authorization code 추측 (guessing)을 통한 권한 획득 가능 여부 | Authorization code 값에 대해 보안 현황 확인 1. 안전한 엔트로피(128bit) 확보 여부 2. 브루트포싱 가능 여부 3. 타임 아웃 설정 현황 확인 (최대한 짧게) |
7 | 클릭재킹 (Clickjacking) 공격을 통한 권한 획득 가능 여부 | OAuth 인증 과정이 Iframe 내에서 진행 가능 여부 확인 |
8 | Query string을 통한 중요 정보 전달 여부 | Query string을 통해 중요 정보 전달 여부 (access token, client secret 등) |
9 | Scope 설정 확인 | 불필요하거나 과도한 권한 부여 여부 확인 |
'인증' 카테고리의 다른 글
OpenID Connect 란? (0) | 2022.08.26 |
---|---|
인증 방식의 종류 (0) | 2022.08.26 |