본문 바로가기

Dev/web

[web] 세션과 토큰

 [세션 기반 인증][토큰 기반] 인증에 관하여

토큰 기반 없었을 때 세션 으로 했음

 

1.     클라이언트가 로그인

2.     성공하면 서버가 유저 세션을 만들고 메모리나 디비에 저장

3.     서버가 클라이언트에게 세션 ID를 보낸다

4.     클라이언트의 부라우저에 세션의 ID만 쿠키에 저장한다.

그니깐 나는 쿠키 에 담겨져있는 ID를 사용하기 위해 get Cookie 를 해야겠네

// let allcookies = document.cookie

        // let cookiearray = allcookies.split(';'); 

        // console.log(cookiearray, 'Cookie Test')   

 

JWT(Json web token)

sessionStorage에 저장한듯 하고..

토큰을 찍어보니 점이 3개 찍혀있음

Jwt 기본 구성이 xxxxx.yyyyy.zzzzz

 니깐

window.sessionStorage

1.     로그인시 서버로부터 access 토큰 받음

2.     서버에 api요청시 access 토큰을 포함시켜야함

지금 이부분인거지.. ㅇㅋ ?

웹과 모바일에서의 JWT 저장

React-Native 개발한 모바일 앱에서는 KeyChain이나 KeyStore에서 암호화되게 JWT 저장할 있는 라이브러리가 있다.

하지만 웹에서는 2가지의 선택이 있다.

  • Cookies
  • local/session storage.

local/session storage

동일한 도메인의 JavaScript 통해 접근할 있으므로 XSS(크로스 사이트 스크립팅)공격에 취약하다.

Cookies

쿠키는 http-only 플래그를 사용해 암호화된 쿠키가 https로만 통신하도록 설정해 XSS 문제를 완화시킬 있다.

하지만 CSRF 공격의 위험이 있다.

CSRF 최근에 인증된 사용자가 프로그램에서 원치 않는 행위를 하도록 한다.

CSURF 같은 라이브러리를 사용하면 예방할 있다.

그래서 보안을 위해 보통 Cookie 사용을 권장한다

 

WithCredentials = true

 

 

'Dev > web' 카테고리의 다른 글

[NestJS] 소개  (0) 2019.10.28
[angular] component와 service  (0) 2019.09.10
[web] 세션과 토큰  (0) 2019.09.04
[tip] Breadcrumb 이란?  (0) 2019.08.30
[db] 시스템DB에서 데이터를 삭제할까?  (0) 2019.08.29
[elasticsearch] error  (0) 2019.08.24