인증과 인가
- 인증 (=로그인) Authenticatioin
- 가입된 유저임
- 인가 Authorization
- 관리자 / 고객에 따라 접근 가능 페이지가 다름
- 관리자든 고객이든 인증을 통해 사이트에 가입된 사용자라는 걸 증명하는것
- 인증 후에, 이 친구 혹시 이 페이지에 접근 권한이 있나?
세션 : (로그인이 되어있는) 상태
쿠키 vs 세션 vs JWT
- 쿠키
- 로그인 -> 서버가 쿠키를 구움
- 사용지 <-> 서버가 쿠키를 핑퐁
- 장점 : 서버가 저장 X => 서버 저장 공간, HTTP / stateless => RESTful
- 단점 : 보안 취약
- 세션
- 로그인 -> 서버가 금고를 만들어서, 정보 저장 그 금고 번호를 줌
- 사용자 <-> 서버가 번호만 가지고 대화
- 장점 : 보안이 비교적 좋음
- 단점 : 서버가 저장 -> 서버 저장 공간 부담, stateless X
- JWT (JSON Web Token)
- 개념
- json 형태의 데이터를 안전하게 전송하기 위한 (웹에서 사용하는) 토큰
- cf. 토큰 : (인증용) 입장 가능한 유저야 / (인가용) 관리자 권한 & 일반 유저 권한
- 장점
- 보안에 강하다 <= '암호화'가 되어 있다
- HTTP 특징을 잘 따름 = Stateless <= '서버가 상태를 저장하지 않음'
- 서버 부담을 줄여줄 수 있음
- cf. 토큰을 발행하는 서버를 따로 만들어줄 수 있음
- 구조 jwt.io
- 헤더: 토큰을 암호화하는데 사용한 알고리즘, 토큰의 형태(jwt)
- 페이로드 : 사용자 정보 (이름, 주소, 핸드폰, ...비밀번호 X)
- 서명 : 만약 페이로드 값이 바뀌면, 이 서명값 통째로 바뀌기 때문에 우리는 JWT를 믿고 사용 가능
- 개념
jwt 설치
npm i jsonwebtoken
모듈 소환 및 서명(토큰 생성)
var jwt = require('jsonwebtoken'); //jwt 모듈
//토큰 생성 = 서명함(페이로드, 나만의 암호키)
var token = jwt.sign({ foo: 'bar' }, 'shhhhh');
- 토큰 생성 = jwt 서명을 했다 (페이로드, 나만의 암호키)
검증
성공하면 페이로드 값 확인 가능
var decoded = jwt.verify(token, "shhhhh"); //토큰과 시크릿키 값
console.log(decoded.foo); // bar
iat : 토큰이 발행된 시간
.env (environment : 환경 병수 '설정 값')
- 개념 : 개발하다가 포트넘버, 데이터베이스 계정, 암호키, ..등등 외부에 유출되면 안되는 중요한 환경 변수들을 따로 관리하기 위한 파일
- cf. 깃허브에 올라가면 안되는 값
- .env 파일은 환경 변수 파일 -> 프로젝트 최상위 패키지에 존재
.env 파일에 키 정의
PRIVATE_KEY = "shhhhh" #jwt 암호키
위의 키 꺼내 쓰기
var jwt = require("jsonwebtoken");
var dotenv = require("dotenv");
dotenv.config();
var token = jwt.sign({ foo: "bar" }, process.env.privateKey);
var decoded = jwt.verify(token, process.env.privateKey); //토큰과 시크릿키 값
console.log(decoded.foo); // bar
유효기간
var jwt = require("jsonwebtoken");
var dotenv = require("dotenv");
dotenv.config();
var token = jwt.sign({ foo: "bar" }, process.env.privateKey, {
expiresIn: "30m",
issuer: "gimga",
});
var decoded = jwt.verify(token, process.env.privateKey); //토큰과 시크릿키 값
console.log(decoded.foo); // bar
'데브코스 > 강의 정리' 카테고리의 다른 글
API 설계 2 (1) | 2024.09.30 |
---|---|
API 설계2 (0) | 2024.09.27 |
데브코스 정리 과제 - 유효성 검사 (0) | 2024.09.24 |
6주차 db 연동 (1) | 2024.09.23 |
5주차 데이터 베이스 GUI, 디비 연동, timezone 설정 (0) | 2024.09.14 |