네트워크

[인증/보안] Token

2023. 5. 3. 09:53
목차
  1. Hashing
  2. 솔트란? 
  3. 해싱의 목적?
  4. Token
  5. 세션 기반 인증의 한계?
  6. 토큰 인증 방식의 흐름
  7. 토큰 인증 방식 장점?
  8. JWT(JSON Web Token)
  9. 이러한 토큰도 한계가 있다...?
  10. 액세스 토큰과 리프레시 토큰
  11. 마무리

Hashing

가장 많이 쓰이는 암호와 방식 중 하나. 복호화가 가능한 다른 암호화 방식들과 달리, 해싱은 암호화만 가능하다.

🔗해싱해보기

솔트란? 

소금을 치듯이 해싱 이전 값에 임의의 값을 더해 데이터라 유출되더라도 해싱 이전의 값을 알아내기 더욱 어렵게 만드는방법

해싱의 목적?

- 왜 복호화가 불가능한 암호화 방식 사용? 데이터 그 자체 사용하는 것이 아니라 동일한 데이터를 사용하고 있는지만 체크하기 때문

- 해싱은 민감한 데이터를 다루어야 하는 상황에서 데이터 유출의 위험은 줄이면서 데이터의 유효성을 검증하기 위해서 사용되는 단방향 암호화 방식


Token

토큰을 사용하면 사용자의 인증 정보를 서버가 아닌 클라이언트 측에 저장할 수 있다.

 

세션 기반 인증의 한계?

- 세션 기반 인증은 서버에서 유저의 상태를 관리해서 서버의 부담이 크기때문에 이를 줄이기 위해 클라이언트에 유저 정보를 저장해서 서버의 부하나 메모리 부족문제를 줄일 수 있는 토큰 기반 인증 방식 등장

- 웹 보안에서의 토큰은 현실의 사무실 출입증, 승차권처럼 인증과 권한 정보를 담고 있는 암호화된 문자열

- 특정 어플리케이션에 대한 사용자의 접근 권한을 부여할 수 있다.

 

토큰 인증 방식의 흐름

1. 사용자가 인증 정보 담아서 서버에 로그인요청

2. 서버는 데이터 베이스에 저장된 사용자 인증정보 확인

3. 인증성공시 해당 사용자의 인증 및 권한 정보를 서버의 비밀 키와 함께 토큰으로 암호화

4. 생성 토큰을 클라이언트로 전달

5. 클라이언트는 전달받은 토큰을 저장

6. 클라이언트가 서버로 리소스 요청할 때 토큰을 함께 전달

7. 서버는 전달받은 토큰을 서버의 비밀 키를 통해 검증

8. 토큰 유효시 클라이언트의 요청에 대한 응답 데이터 전송

 

토큰 인증 방식 장점?

무상태성 : 서버는 비밀 키를 통해 클라이언트가 보낸 토큰의 유효성만 검증하면 돼서 무상태적인 아키텍쳐 구축 할 수 있다.

확장성 : 다수의 서버가 공통된 세션 데이터를 가질 필요 없다.

어디서나 토큰 생성 가능 : 토큰 생성과 검증이 하나의 서버에서 이루어지지 않아도 되기 때문에 생성만 담당하는 서버 구축해서 여러 서비스 간의 공통된 인증 서버 구현 가능

권한 부여에 용이 : 다양한 정보를 담을 수 있다.

 

JWT(JSON Web Token)

JSON 객체에 정보를 담고 이를 토큰으로 암호화하여 전송할 수 있는 기술

 

구성

dot(.) 으로 나누어진 세부분 Header, Playload, Signature

 

Header : 해당 토큰 자체를 설명하는 데이터

- 토큰 종류나타내는 typ

- 어떤 알고리즘으로 signature를 암호화 했는지 알 수 있는 alg

{
  "alg": "HS256",
  "typ": "JWT"
}

Playload : 전달하려는 내용물을 담고있는 부분

- 단순한 Base64로만 인코딩 된 값

- 브라우저에서 쉽게 디코딩하여 값을 읽을 수 있으므로 민감한 정보 담지 않는것이 좋다.

ex) 유저의 개인정보, 토큰의 발급 시간 및 만료 시간

{
  "sub": "someInformation",
  "name": "phillip",
  "iat": 151623391
}

Signature : 토큰의 무결성 확인할 수 있는 부분 

- Base64로 인코딩된 Header와 Payload + 시크릿 값 합쳐 Header에 표시한 알고리즘으로 암호화 한 값

- 만약 HMAC SHA256알고리즘을 사용했다면 아래와 같다.

HMACSHA256(base64UrlEncode(header) + '.' + base64UrlEncode(payload), secret);

이러한 토큰도 한계가 있다...?

- 서버가 관리 주체가 아니기 때문에(무상태성) 탈취되어도 강제로 만료 시킬 수 없다.

- 탈취를 막자고 유효기간 짧게 설정하면 만료될때마다 인증해야하고 길게하면 탈취되었을때 더 치명적임

- 토큰에 여러정보 넣을 수 있어서 크기가 커지면 암호화하는 과정도 길어지고 네트워크 비용문제 생길 수 있다.

 

액세스 토큰과 리프레시 토큰

한계를 극복하기 위해 고안된 방법들

- 액세스 토큰 : 서버에 접근하기 위한 토큰 보안을 위해 24시간 정도의 짧은 유효기간 설정

- 리프레시 토큰 : 액세스 토큰이 만료되었을 때 새로운 액세스 토큰을 발급받기 위해 사용되는 토큰 (액세스보다 유효기간 길게 설정)

그러나

리프레시 토큰의 유효기간을 길게 성정해준 만큼  탈취되었을때 위험성이 크다.

 

마무리

보안에 완벽이란 없다. 으-<-<

 

 

 

'네트워크' 카테고리의 다른 글

[Proxy] CORS 에러를 해결하는 방법  (2) 2023.06.07
[인증/보안]OAuth  (0) 2023.05.04
[인증/보안] cookie/session  (2) 2023.05.02
[ngrok] 3004오류  (2) 2023.05.01
[네트워크/HTTP] HTTP  (0) 2023.04.29
  1. Hashing
  2. 솔트란? 
  3. 해싱의 목적?
  4. Token
  5. 세션 기반 인증의 한계?
  6. 토큰 인증 방식의 흐름
  7. 토큰 인증 방식 장점?
  8. JWT(JSON Web Token)
  9. 이러한 토큰도 한계가 있다...?
  10. 액세스 토큰과 리프레시 토큰
  11. 마무리
'네트워크' 카테고리의 다른 글
  • [Proxy] CORS 에러를 해결하는 방법
  • [인증/보안]OAuth
  • [인증/보안] cookie/session
  • [ngrok] 3004오류
Summer.dev
Summer.dev
프론트엔드 개발자 Summer 입니다! 피드백은 언제나 환영입니다.
Summer.dev
꾸준함이 무기
Summer.dev
전체
오늘
어제
  • 분류 전체보기
    • Projects
      • Next.js board-project
      • MOMO
    • 원티드
    • 우테코 프리코스
    • JavaScript
    • React
    • TypeScript
    • Node.js
    • Algorithm
      • 코플릿
      • 개념정리
    • 네트워크
    • 오류해결
    • 회고
    • 기술면접준비
    • git,github
    • 소소하게 궁금한것
    • Next.js Beta Docs 번역
    • 디자인패턴
    • 트러블슈팅
    • 번역

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 메모이제이션
  • 알고리즘

최근 댓글

최근 글

hELLO · Designed By 정상우.
Summer.dev
[인증/보안] Token
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.