OAuth 2.0

YoungJoon Suh·2022년 4월 18일
0

웹이나 앱에서 흔히 찾아볼 수 있는 소셜 로그인 인증 방식은 OAuth 2라는 기술을 바탕으로 구현됩니다. 전통적으로 직접 작성한 서버에서 인증을 처리해 주는 것과는 달리, OAuth는 인증을 중개해 주는 매커니즘입니다. 보안된 리소스에 액세스하기 위해 클라이언트에게 권한을 제공하는 프로세스를 단순화하는 프로토콜입니다.
즉, 이미 사용자 정보를 가지고 있는 웹 서비스(GitHub, google, facebook 등)에서 사용자의 인증을 대신해 주고, 접근 권한에 대한 토큰을 발급한 후, 이를 이용해 내 서버에서 인증이 가능해집니다.

OAuth2.0은 인증을 위한 표준 프로토콜의 한 종류
보안된 리소스에 액세스하기 위해 클라이언트에게 권한을 제공(Authorization)하는 프로세스를 단순화하는 프로토콜 중 한 방법이다.

OAuth에서 꼭 알아야 할 용어
Resource Owner: 액세스 중인 리소스의 유저 (User 김코딩)
Client: Resource owner를 대신하여 보호된 리소스에 액세스하는 응용프로그램 (App)
Resource server: client의 요청을 수락하고 응답할 수 있는 서버 (facebook)
Authorization server: Resource server가 액세스 토큰을 발급받는 서버 (facebook)
Authorization grant: 클라이언트가 액세스 토큰을 얻을 때 사용하는 자격 증명
Authorization code: access token을 발급받기 전에 필요한 code
Access token: 보호된 리소스에 액세스하는 데 사용되는 credentials
Scope: 주어진 액세스 토큰을 사용하여 액세스할 수 있는 리소스 범위 (image)

Grant type 이란?
Client가 액세스 토큰을 얻는 방법

Grant type 종류

  • Authorization Code Grant Type 많이 쓰임
  • Implicit Grant Type
  • Client Credentials Grant Type
  • Resource Owner Credentials Grant Type
  • Refresh Token Grant Type 많이 쓰임

Authorization Code Grant Type
액세스 토큰을 받아오기 위해서 먼저 Authorization code를 받아 액세스 토큰과 교환하는 방법
Authorization code절차를 거치는 이유는 보안성 강화에 목적이 있습니다.
Client는 client-secret을 공유하고 액세스 토큰을 가지고 오는 것은 탈취될 위험이 있기 때문에 Client에서는 authorization code만 받아오고 Server에서 Access token 요청을 진행합니다.

Refresh Token Grant Type
일정 기간 유효 시간이 지나서 만료된 액세스 토큰을 편리하게 다시 받아오기 위해 사용하는 방법
Access token 보다 Refresh token의 유효 시간이 대체로 조금 더 길게 설정하기 때문에 가능한 방법입니다.
server마다 Refresh token에 대한 정책이 다 다르기 때문에 Refresh token을 사용하기 위해서는 사용하고자 하는 server의 정책을 살펴볼 필요가 있습니다.
OAuth는 인증(Authentication)을 다른 서비스에 맡길 뿐, 접근 권한 관리(Authorization)는 순전히 내 서버의 몫입니다.

Authentication: 인가된 사용자인가 확인 (로그인)
Authorization: 인가된 사용자의 권한 확인 (기능을 사용할 권한 부여)

  • OAuth의 장점
  1. 자주 사용하고 있는 중요한 서비스들(google, github, facebook)의 ID와 Password만 기억해 놓고 해당 서비스들을 통해서 소셜 로그인을 할 수 있다.
  2. 보안상의 이점도 있습니다. 검증되지 않은 App에서 OAuth를 사용하여 로그인한다면, 직접 유저의 민감한 정보가 App에 노출될 일이 없고 인증 권한에 대한 허가를 미리 유저에게 구해야 하기 때문에 더 안전하게 사용할 수 있다.
profile
저는 서영준 입니다.

0개의 댓글