WIL5주차
이번 주 배운 것
인가, 인증의 차이
인증 | 인가 | |
---|---|---|
유저가 누구인지 확인하는 절차 | 유저에 대한 권한을 확인하고 서비스를 사용할 수 있는지 체크하는 것, 접근 권한 체크 | |
로그인, 토큰 확인 | (로그인을 한 상태에서 권한을 부여받음, 로그인을 해도 일정 수준 이상의 권한이 있어야 무언가를 할 수 있음 등) |
현재 작업하고 있는 프로젝트에선 JWT를 이용해 토큰을 발급하는 것을 사용하고 있다.
JWT(JSONWEBTOKEN)
로그인 등에 사용될 때 사용되는 토큰 중 하나.
웹표준을 따르고 있으며 JSON 객체를 사용하여 정보를 전달함.
REST API를 만들 때 주로 사용하는 토큰.
구조
header.payload.signature
header : 토큰의 타입(typ), 해싱 알고리즘(alg) 같은 토큰 자체의 정보를 전달한다.
payload : 토큰에 담을 수 있는 정보들이 이 안에 담겨 있다.
signature : 토큰을 인코딩하거나 유효성 검증을 할 때 사용하는 고유한 암호화 코드.
JWT의 장단점
장점 | 단점 |
---|---|
필요한 모든 정보는 토큰 자체에 포함되어 있어 별도의 인증 저장소가 필요 없음. | 토큰 자체에 정보가 있어 디코딩될 경우 위험함 |
쿠키를 전달하지 않아도 되므로 쿠키를 사용함으로써 취약점이 조금 낫다. | 토큰 기이가 좀 길어서 네트워크에 부하를 줄 수 있다. |
트래픽에 대한 부담을 덜 수 있다. | payload만 따로 때서 디코딩 할 위험이 있다. |
내장된 만료 | 토큰의 소유권은 발급한 사람에게 있다. |
쿠키와 세션 방식의 장단점
이번 프로젝트에선 쿠키를 통해 정보를 전달했던 것 같은데 다음에는 세션을 통해서 전달해 보려고 한다. 쿠키와 세션의 차이에 대해서 잠깐 정리하고 가려고 한다.
쿠키 | 세션 |
---|---|
클라이언트(브라우저) 로컬에 저장되는 키와 값이 들어 있는 작은 데이터 파일 | 세버 측에서 관리하는 작은 데이터 파일 |
클라이언트에 300개까지 저장 가능 | 서버에서는 클라이언트를 구분하기 위해 세션 id를 부여하여 웹 브라우저가 서버에 접속하여 브라우저가 종료할 때까지 인증 상태를 유지함. |
사용자가 따로 요청하지 않아도 브라우저가 request시 request header를 넣어서 자동으로 서버에 전송함 | 사용자가 많을 수록 서버 메모리를 많이 차지함 |
아이디, 비밀번호 저장 | 보안 면에서 쿠키보다 우수함 |