인증(Authentication) / 인가(Authorization)
쿠키 세션 JWT 관한 글
인증(Authentication) : 서비스를 이용하려는 유저가 등록된 회원인지 확인하는 절차
-> 로그인 기능을 생각하면 됨
인가(Authorization) : 인증을 받은 유저가 특정 리소스에 접근할 수 있는 권한 이 있는지 확인하는 절차
-> 로그인 이후의 기능들을 사용할 때를 생각할 것
왼쪽 그림 HTTP 프로토콜의 특징
key-value
형태로 저장 됨.Origin
서버 주소가 http://localhost:5000이라면 요청을 보낼 수 있는 클라이언트 서버도 http://localhost:5000로 동일 해야함
쿠키는 클라이언트에서 직접 추가/삭제/수정이 가능
key-value
형식) -> 생성된 sessionId
를 쿠키에 담아 브라우저에 전달sessionId
를 담아서 보냄sessionId
를 세션 저장소에 조회하여 있으면 DB에 데이터를 조회하여 응답암호화 | 인코딩 | |
---|---|---|
목적 | 데이터 기밀성 및 보안 강화 | 데이터 전송 및 저장 효율성 개선 |
방식 | 비밀키 또는 공개키를 사용 | 공개된 규칙을 사용 |
예시 | ASCII, Base64 등 | SHA256, HTTPS, RSA 등 |
암호화는 데이터를 인가된 사람만 읽을 수 있는 반면 인코딩은 아무나 읽을 수 있다.
JWT : 토큰 기반 인증 방식
Header : 토큰 종류 + 알고리즘
Payload : 중요 데이터가 담겨 있음. 사용자의 id, 토큰 만료시간 등
Signature : 토큰의 위변조 확인. 서버만 알 수 있는 비밀키를 사용해 토큰의 무결성 보장
signature
에 secret key
가 필요하고, secret key
는 복호화가 아니라 토큰이 유효한 지를 검증하는 데 사용로그인/회원가입 시 토큰 인증
인가(Authorization) 시 토큰 인증
☝ Refresh Token
으로 보안을 강화하는 것은 중요해요!
다만, 이를 위해서는 각종 토큰을 발급해주는 영역의 백엔드 개발자와의 협업이 필요해요. 우리 과정에서는 이 부분까지 실습하지는 않습니다 🙂 Firebase, Supabase에서는 자체적인 시스템에서 access token, refresh token을 처리하고 있으니 하기 개념은 ‘교양’ 정도로 알고 계시면 좋을 것 같아요.
리소스 접근 인가를 받기 위해 사용되는 토큰을 Access Token
이라고 부릅니다.
Access Token
의 만료기간을 길게 잡고 인증상태를 오래 가져갈 경우 서버 부담은 줄어드나 보안성(탈취 당할 경우)에 허점이 있습니다.
인증 보안이 중요한 서비스의 경우 인증 시 2개의 토큰 (Access Token, Refresh Token
)을 발급합니다. Access Token
의 기간은 30분 정도로 짧게 가져 가고, Refresh Token
은 1~2주 정도로 길게 잡는 경우가 많습니다.
이 경우 서버에서는 Access Token
이 만료되었을 때 Refresh Token
이 유효한 상태면 새로운 Access Token
을 클라이언트에 발급해주고 인증상태를 유지할 수 있도록 하고, Refresh Token
만료 시 다시 로그인하라는 메시지를 응답합니다.