공격을 하기 위한 조건
- 쿠키를 사용한 로그인
- 예측할 수 있는 요청/parameter를 가지고 있어야함
JWT (Json Web Token)
- 대표적인 토큰기반인증
- Json 포맷으로 사용자에 대한 속성을 저장하는 웹 토큰
JWT의 종류
- Access Token
- Refresh Token
구조
- Header
{ "alg": "HS256", // 어떤 알고리즘으로 sign(암호화) 할지 "typ": "JWT" // 이것이 어떤 종류의 토큰인지(지금의 경우엔 JWT) }
- Payload
{ // 사용자의 유저 이름 등 필요한 데이터는 이곳에 담아 암호화 "sub": "someInformation", "name": "phillip", "iat": 151623391 }
- Signature
//HMAC SHA256 알고리즘(암호화 방법중 하나)을 사용한다면 signature는 아래와 같은 방식으로 생성 HMACSHA256(base64UrlEncode(header) + '.' + base64UrlEncode(payload), secret);
토큰기반 인증 절차
토큰 기반 인증 장점
- Statelessness & Scalability (무상태성 & 확장성)
1. 서버는 클라이언트에 대한 정보를 저장할 필요 X
2. 토큰을 헤더에 추가함으로 인증절차 완료- 안정성
1. 암호화 한 토큰을 사용, 암호화 키를 노출 할 필요 X- 어디서나 생성 가능
- 권한 부여에 용이
1. 토콘의 payload(내용물)안에 어떤 정보에 접근 가능한지 정의