20230223 [react] - 쿠키,세션,토큰,jwt

lionloopy·2023년 2월 23일
0

리액트

목록 보기
18/18

인증&인가


인증: 서비스를 이용하려는 유저가 등록된 회원인지 확인하는 절차(로그인)
인가: 특정 리소스에 접근할 수 있는 권한이 있는지 확인하는 절차(마이페이지)

http 프로토콜 통신의 특징

  • 무상태: 서버는 클라이언트의 상태를 기억하지 않는다. 따라서 각 요청마다 서버에서 요구하는 모든 상태 정보를 담아서 요청해야 한다.
    :상태값은 매 요청마다 클라이언트가 가지고 오기 때문에, 서버는 클라이언트의 상태를 별도로 기억할 필요 없이, 주문 받은 대로 응답해준다.
    :이러한 특징 때문에 동일한 서버를 여러개로 확장시킬 수 있다.
  • 비연결성: 서버와 클라이언트는 연결되어 있지 않다. 서버 입장에서는 매번 새로운 요청이다.
    :최소한의 서버 자원으로 서버를 유지할 수 있게 해준다.
    :그러나 요청이 잦은 채팅과 같은 서비스의 경우 비효율적이다.

쿠키


쿠키:

  • 무상태와 비연결성이라는 http통신의 특징에도 불구하고, 서버가 클라이언트의 인증상태를 기억하는 것 처럼 구현할 수 있는 수단으로 사용할 수 있다.
  • 브라우저에 저장되는 텍스트 파일이며, key-value형태로 저장된다.
  • 별도로 삭제처리하거나 유효기간이 만료되지 않으면 서버와 통신할 때 자동으로 주고 받게 된다.
  • 서버에 특정 API요청을 했을 때 서버가 응답시 header안에 set-cookie속성으로 쿠키정보를 담아주면, 응답을 받은 브라우저는 쿠키를 브라우저에 자동으로 저장한다.
    (개발자도구-애플리케이션-저장용량-쿠키)
  • 단, 동일한 origin또는 CORS를 허용하는 origin에만 쿠키를 보낸다.(유튜브 서버에서 받은 쿠키는 유튜브 이용시에만 주고 받을 수 있다.)
    (CORS: 다른 출처에 리소스를 요청하는 것을 허용하는 정책. CORS설정을 통해 상호합의된 웹사이트는 예외적으로 서로 다른 origin임에도 리소스를 요청할 수 있다.)

세션


세션

  • 사용자와 서버간의 연결이 활성화된 상태를 의미하는 개념이다.
    (인증이 유지되고 있는 상태)
  • 로그인 성공 -> 서버에서 세션 생성 및 저장 -> 세션을 쿠키로 브라우저에 저장


로그인 인증 과정
1.브라우저에서 유저가 로그인을 시도한다.
2.서버는 DB에 이 정보를 가진 유저가 있는지 물어본다.
3.DB는 정보가 있으면 데이터베이스 객체를 서버에게 주게 된다.
4.세션 id가 발급되고
5.저장된다.
6.브라우저에게 세션 id를 응답으로 준다.
7.브라우저 쿠키에 세션 id를 자동으로 저장한다.

토큰 JWT


토큰

  • 클라이언트에서 보관하는 암호화된 인증 정보(세션은 서버에 저장중)
  • 세션처럼 서버에서 사용자의 인증 정보를 보관할 필요가 없기 때문에 서버 부담을 줄여주는 인증 수단이다.
  • 웹에서 인증수단으로 사용되는 토큰은 주로 JWT(json web token)이다.

JWT

  • header.payload.signature형식으로 3가지 데이터로 구성되어 있다.
  • 암호화된 토큰은 누구나 복호화(encode)해서 payload를 볼 수 있다.
    (즉, 토큰의 용도는 인증정보(payload)에 대한 보호가 아니라, 위조 방지이다.)
  • payload를 토큰화 할 때, signature에 secret key가 필요하고, secret key는 복호화가 아니라 토큰이 유효한지를 검증하는 데 사용된다.


로그인 인증 과정
1.유저가 브라우저에서 psot로 id,pw 요청을 날린다.
2.db에게 이 사람의 정보가 맞는지 물어본다.
3.db가 맞는지 아닌지 해당 정보를 주고,
4.서버는 secret key로 jwt토큰을 생성한다.
5.클라이언트에게 쿠키 혹은 바디로써 넣어준다.
6.쿠키로 넣어주면 브라우저에 자동으로 들어가게 된다.

refresh 토큰
:리소스 접근 인가를 받기 위해 사용되는 토큰(보안강화를 위함)
인증 보안이 중요한 서비스의 경우 2개의 토큰을 발급하고, access 토큰의 기간은 30분 정도로 짧게 가져가고, refresh 토큰은 1-2주 정도로 길게 잡는 경우가 많다.

profile
Developer ʕ ·ᴥ·ʔ ʕ·ᴥ· ʔ

0개의 댓글