[인증/보안] 기초

Value:1·2021년 10월 22일
0

OAuth2

소셜 로그인 인증 방식은 OAuth2 라는 기술을 바탕으로 구현된다.
인증을 중개해주는 메커니즘이다.
보안된 리소스에 액세스하기 위해 클라이언트에게 권한을 제공하는 프로세스를 단순화하는 프로토콜이다. 즉, 이미 사용자 정보를 가지고 있는
웹 서비스(깃허브, 구글, 페이스북 등)에서 사용자의 인증을 대신해주고,
접근 권한에 대한 토큰을 발급한 후, 이를 이용해 내 서버에서 인증이 가능해진다.

인터넷 사용자들이 자신의 비밀번호를 제공하지않고 자신들의 리소스 대해서 다른 웹사이트나 어플리케이션에서 접근할 수 있는 개방형 프로토콜의 한 종류

OAuth에서 꼭 알아야 할 용어

resoutce owner

: 액세스 중인 리소스의 유저
유저 김코딩

client

: resource owner를 대신하여 보호된 리소스에 액세스하는 응용프로그램
앱(페이스북 등)

resource server

: client의 요청을 수락하고 응답할 수 있는 서버
페이스북

Authorization server

: resource server가 액세스 토큰을 발급받는 서버
페이스북

Authorization grant

: 클라이언트가 액세스 토큰을 얻을 때 사용하는 자격 증명
대표적인 방법

Authorization code

: access token을 발급받기 전에 필요한 code
(허가증)클라이언트 아이디와 클라이언트 시크릿이 필요한데 이것을 Authorization 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

[1]

-Authorization Code Grant Type
: grant type중에서 가장 일반적으로 사용되고 있는 유형
액세스 토큰을 받아오기 위해서 먼저, -Authorization Code를 받아
액세스 토큰과 교환하는 방법.

-Authorization Code 절차를 거치는 이유는 보안성 강화에 목적이 있다.
client-secret을 공유하고 액세스 토큰을 가지고 오는 것은 탈취될 위험이 있기 때문에 client에서는 Authorization Code만 받아 오고 Server에서 Access token 요청을 진행한다.

-Authorization Code Grant Type (6가지 과정)

  1. Resouce owner가 client로 접근
  2. client가 Resource owner를 Authorization server로 리다이렉트
  3. Resource owner가 Authorization server로 Resource owner의 액세스 권한 부여 요청
  4. Authorization server가 client에서 Authorization Code 제공
  5. client가 Authorization server에게 Authorization Code를 Access token으로 교환
  6. client가 Resource server에게 client는 Access token을 통해 Resource에 액세스 가능
  7. client가 Resource server에게 액세스 토큰과 함께 API 요청을 보낸다
  8. Resource server가 client에게 client가 요청한 리소스를 전달한다.

즉, 직접적으로 소통이 가능하다.

[2]

-Refresh Token Grant Type

일정 기간 유효 시간이 지나서 만료된 액세스 토큰을 편리하게 다시 받아오기 위해 사용하는 방법

Access token보다 Refresh token의 유효 시간이 대체로 조금 더 길게 설정하기 때문에 가능한 방법이다.
server마다 Refresh token에 대한 정책이 다 다르기 때문에 Refresh token을 사용하기 위해서 사용하고자 하는 server 정책을 살펴볼 필요가 있다.

유저가 소셜로그인을 인증을 다시 하지않고도 안전하게 로그인이 유지될 수 있는 방법

  1. client가 authorization server에게 refresh token을 통해서 새로운 액세스 토큰을 요청한다
  2. authorization이 client에게 새로운 엑세스 토큰을 반환
  3. client가 resource server에게 client는 액세스 토큰을 통해 user의 resource에 액세스 가능

0개의 댓글