728x90
반응형
토큰기반 인증
클라이언트가 서버에게 id/pw 검증 요청
클라이언트 서버에서 id/pw 검증, 맞으면 토큰 생성 (암호화)
서버는 클라이언트에게 토큰만 응답
클라이언트는 토큰을 저장 (cookie에 저장 - 가장 안전하다고 생각되는?)
클라이언트는 매 요청마다 토큰을 보냄
JWT - json web tokken
웹이나 앱에서 토큰을 교환할 때 사용
2진법
2진법은 16진법과 가깝다..?
바이너리 파일 -> 문자를 16진수로 바꾼 파일, 대부분의 파일이 바이너리 형식
비트 숫자가 같기 때문에 16진수로 표현하기 쉬움 - 컴퓨터는 2진수를 사용
16진수는 64진수와 가깝다
64진수가 16진수보다 비트를 적게 사용하기 때문에 64진수로 변환
2진법 변환
숫자를 2로 나누었을때 나머지가 1이면 1 0이면 0
15 -> 1111 (4비트)
15 - > F (16 진수)
16진수 - 0
9 A
F 사용
let header = {
"alg": "HS256",
"typ": "JWT"
}
let txt = 'hi';
let txt2 = Buffer.from(txt); // 16진수로 바꿈
let txt3 = txt2.toString('base64').replace('=','');
let encodedHeader = Buffer.from(JSON.stringify(header)).toString('base64').replace('=','');
let payLoad = {
"sub": "1234567890",
"name": "John Doe",
"user" : "swk",
"iat": 1516239022
}
let encodedPayLoad = Buffer.from(JSON.stringify(payLoad))
.toString('base64') // 64비트로 바꿈
.replace(/=/g,''); // 정규표현식 모든 = 제거
// 인코딩 과정에서 남는 비트가 3비트 미만일 경우
// 버퍼에 남은 부분을 '=' 로 반환?
// createHmac 인자 -> 1. 암호화 형태 2. 암호화 규칙(16 진수) 둘 다 String 형식
let rule = Buffer.from('ing');
let signature = crypto.createHmac('sha256', rule)
.update(`${encodedHeader}.${encodedPayLoad}`)
.digest('base64').replace(/=/g,'')
console.log `${encodedHeader}.${encodedPayLoad}.${signature}`;반응형
'Back_end > node.js' 카테고리의 다른 글
| node.js) 웹 쿠키, 스토리지 (0) | 2021.05.27 |
|---|---|
| node.js) 토큰기반인증과 토큰의 생성(JWT), 암호화 - 2진법 (2) | 2021.05.27 |
| node.js) 웹 api (0) | 2021.05.26 |
| node.js) http통신 프로토콜 (0) | 2021.05.25 |
| node.js) data 전달 - body, headers (0) | 2021.05.24 |
댓글