티스토리 뷰

Dev

토큰 기반 인증

yyoujg 2022. 6. 6. 16:08

1) 토큰 기반 인증이란?

세션 기반 인증

예전에는 사용자의 로그인 상태를 서버가 전부 가지고 있었다.

서버의 세션에 사용자 정보를 넣고 이 사람이 로그인을 했다 안했다를 전부 기록하고 기억했다.

 

이 세션은 서버의 메모리나 데이터베이스 등에 저장해두는데, 로그인한 사용자가 많아지면 서버에 부하가 많이온다.

그렇다고 서버를 여러개 놓자니 관리가 까다루워지기 때문에 최근에는 토큰 기반 인증 방법을 많이 사용한다.

 

토큰 기반 인증

토큰 기반 인증은 사용자가 맞다는 정보를 가진 토큰으로 서로 사용자임을 확인하는 프로토콜이다.

공연의 입장권 같은 거라고 생각하면 된다.

 

2) OAuth2.0

외부서비스의 인증 및 권한부여를 관리하는 프레임워크이다.

→ Open Authentication, Open Authorization이라고 한다. (인증과 허가를 포함)

  • OAuth 동장 방식(간단 ver.)
    1. 클라이언트와 서버 사이에 인증(로그인)을 하면 서버가 access_token을 준다.
    2. 클라이언트는 access_token을 이용해서 API 요청을 할 수 있다.
    3. 서버는 API 요청을 받고, access_token을 가지고 권한이 있는지 확인해서 결과를 클라이언트에 보내준다.
  • OAuth 동장 방식(외부 서비스 엮음 ver.)

유저가 구글 로그인을 하는 상황이라고 가정한다면,

여기서 구글은 유저의 정보도 가지고 있을 것이고, 로그인을 검증도 해줄 것이다.

구글은 Rescoure Server(자원 서버) + Authorization server(권한 서버)이다.

유저는 그 정보를 가진 사람이니 Resource Owner(자원 소유자)라고 부른다.

(구글에서 주는 유저 정보는 Resource(자원)이라고 부른다.

 

1. 유저가 구글 로그인을 한다.

  • 자원 소유자가 자원서버에 권한 요청을 한 것이다.

2. 구글은 로그인할 때 유저가 입력한 정보(아이디, 비밀번호 등)을 보고 클라이언트(웹사이트)에 접근 권한을 준다.

3.클라이언트는 이 권한을 가지고 Authorization server(권한 서버)에 access_token을 요청한다.

4.클라이언트는 이 access_token을 가지고 구글에서 유저 정보를 가져올 수 있다.

5.구글은 클라이언트가 보낸 acess_token을 가지고 권한이 있나 없나 확인해서 클라이언트에 보내준다.

 

2) JWT(Json Web Token)

토큰의 한형식이다. 데이터가 JSON형태로 이루어져 있는 토큰이다.

  • 구성 : [header],[payload],[signature(서명)]
  • header: 토큰 타입과 암호화 방식 정보가 들어간다.
  • payload: 토큰에 담을 정보가 name: value 쌍으로 들어간다.
  • signature: 서명정보. secret key를 포함해서 header와 payload 정보가 암호화 되어 들어간다.
  • 토큰 기반 동작 방식
  • 유저가 로그인을 시도하면,
  • 서버가 요청을 확인하고 secret key를 가지고 access_token을 발급한다.
  • 클라이언트에 JWT를 전달하고
  • 클라이언트는 API 요청을 할 때 Authorization header에 JWT를 담아서 보낸다.
  • 서버는 JWT의 서명을 확인하고 payload에서 정보를 확인해서 API 응답을 보낸다.

JWT vs OAuth

JWT와 OAuth는 로그인에 많이 쓰이는 두 인증 방식이다.

JWT는 토큰의 한 형식이고 OAuth는 프레임 워크이고 OAuth에서 토큰으로 JWT를 사용할 수 도 있다.

 

Authorization 헤더

HTTP Authorization 헤더

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함