코드스테이츠 38일차 -2 [Token ]

Lumi·2021년 10월 27일
1
post-thumbnail

앞서 Session을 활용한 보안 처리를 알아보았다.

이번에는 또다른 보안 처리하는 법인 Token을 이용한 보안에 대해서 알아 볼것이다.

일단 Session에 비해서 장점이 있다.

  • Session은 하나의 서버에 한개밖에 다룰수 없지만 Token은 사용자마다 다루어 줄수가 있다.

JWT

토큰을 다루는 대표적인 모듈이다

일단 토큰은 유저 정보를 암호화한 상태로 담을 수 있고, 암호화했기 떄문에 클라이언트에 담을 수 있다.

JWT의 종류

  1. Access Token
  • 보호된 정보들에 접근할 수 있는 권한부여에 사용한다.
  • 실제로 권한을 얻는데에 사용디는 토큰이고 권한을 부여하는데에는 이 토큰만 있으면 된다.
  • 해킹당할시에 사고가 커질수 있기 때문에 비교적 유효기간을 짧게 설정한다.
  1. Refresh Token
  • Access token의 유효기간이 만료되면 대체하는 토큰이다.
  • 유효기간이 길며 똑같이 해킹을 당하게 되면 사고가 커질수 잇다.
  • 그러기때문에 사용을 하지 않는 웹사이트들도 많다.

세상에 완벽한 보안은 없다는 것을 알아두자!!

JWT의 구조

  1. Header
  • 어떤 종류의 토큰인지, 어떤 알고리즘으로 암호화할지가 적혀있다.
  1. Payload
  • 정보가 담겨 있다.
  • 권한, 사용자의 이름 등 필요한 데이터를 암호화하여 보관한다.
  1. Signature
  • 비밀키를 사용하여 암호화 하는 곳이다.

JWT사용 예시

JWT는 권한을 부여하는 역할에서 굉장히 유용하다.

1. 클라이언트가 로그인 요청을 보낸다.

2. 서버에서 아이디 비밀번호를 확인하고 암호화된 토큰을 생성한다.

3. 토큰을 클라이언트에게 보내주고 클라이언트는 토큰을 저장한다.
- 저장하는 곳은 localStorage, cookie, State등등 다양하다.

4. 클라이언트가 요청을 할떄 HTTP헤더에 토큰을 담아 보낸다.

5. 이후 서버에서도 토큰을 확인한뒤 사용자가 맞는지 판별한다.

JWT(토큰)기반 인증의 장점

1. Statelessness & Scalability (무상태성&확장성)
- 서버 입장에서는 토큰해독만 하면 되지 클라이언트 정보를 저장할 필요가 없다.
- 클라이언트 입장에서는 요청을 보낼때마다 토큰만 포함시켜 보내면 된다.

2. 안전하다.

3. 어디서나 생성이 가능하다.
- 굳이서버에서만 만들 필요는 없다.

4. 권한 부여에 용이하다.
profile
[기술 블로그가 아닌 하루하루 기록용 블로그]

0개의 댓글