Node.js 활용3

2024. 11. 13. 13:21Node.js

Node.js 에서는 보안면에서 좋다.

 

Authentication(인증)

1. Session & Cookie
Cookie
- 클라이언트 컴퓨터예 저장되는 작은 데이터 조각
- 서버로부터 전송되어 클라이언트 웹브라우저에 저장
- 텍스트 형식으로 주로 사용자 인증, 설정, 장바구니 등에 사용

Session
-웹 서버측에 유지되는 상태 정보
- 사용자에 대한 고유한 세션ID를 통해 식별
- 서버 메모리 또는 데이터베이스에 저장할 수 있음


2. JWT(Json Web Token)
- 웹 어플리케이션과 서비스간에 정보를 안전하게 전달하기 위한 인증 및 권한 부여 매커니즘을 구현하는데 사용되는 표준화된 방법 중 하나
- JSON 포멧을 사용하여 정보를 표현하고 서명 및 안호화를 통해 정보의 무결성을 보장

    { Header | Payload | Signature }

- Header : JWT의 유형과 서명 알고리즘을 지정
    {
        "alg" : "SHA-256",
        "type" : "JWT"
    }

 

   npm i bcrypt 설치

    bcrypt
    - 해시 함수를 사용하여 비밀번호를 안전하게 저장하는데 사용되는 암호화 라이브러리
    - 단반향 해시 함수로 한번 해시된 값을 다시 원래 값으로 역추적하는 것이 불가능
    - 솔트(salt) : 해시에 고유한 솔트값을 추가하여 보안성을 높임. 같은 비밀번호를 가진 사용자가 있더라도 서로 다른 해시값을 가짐
    - 작업인자(Adaptive) : 매개변수를 조정하여 해시 작업의 복잡성을 조절. 암호 분석학적으로 안전한 해시함수를 유지하면서도 암호화 작업에 필요한 시간을 조절할 수 있게함

- Payload : 토큰에 포함된 클레임을 잠고 있는 부분. 클레임은 사용자의 정보와 추가적인 데이터를 포함
    {
        "userid" : "apple",
        "name" : "김사과",
        "age" : 20
    }

- Signature : JWT의 무결성을 보장하며, 해킹이나 변조를 방지한다.

 


JWT 작동방식
1. 인증 과정 : 사용자가 로그인하면 서버는 사용자의 인증 벙보 확인하고 JWT를 생성해 반환
2. 클라이언트 저장 : JWT를 localStorage 또는 쿠키에 저장
3. 클라이언트는 서버에 요청할때 JWT를 Authentication 헤더에 포함해 전송
4. 서버는 JWT의 서명을 검증하고 페이로드 정보를 추출하여 사용자를 식별하거나 요청을 처리

 

 

암호화(Encryption)  해시(Hash) 는 모두 암호화 기법에 해당하지만 방향성에서 차이를 보인다.
암호화는 양방향 암호화 기법으로 암호화와 복호화가 가능하다.

해시는 단방향 암호화 기법으로 복호화가 불가능하다는면에서 보안이 좋다

여기서 salt는사용자의 비밀번호에 난수를 추가하여 함께 해시 함수를 돌려 보안을 높이는 매개변수라 보면된다.

예제를 보자

 

bcrypt의 예시) 

import * as bcrypt from 'bcrypt'


// const password = 'abcd1234'
const password = '3333'
const hashed = bcrypt.hashSync(password, 10)
// const hashed2 = bcrypt.hashSync(password, 10)
console.log(`password : ${password}, hashed: ${hashed}`)
// console.log(`password : ${password}, hashed: ${hashed2}`)
//node bcrypt.js
console.log(password)
//password : abcd1234, hashed: $2b$10$pUV3FaX7vlPiy.2lLtXXI.gdicSlaQaWz4x4sIzjFrWoCaOPWN2sC
// 10$: 라운드수
// pUV3FaX7vlPiy :해싱에 사용된 salt값
// salt값 뒤에는 매번 바뀐다
// 해시값

const result = bcrypt.compareSync('abcd1234', hashed)
console.log(result)
-->
비밀번호 값을 넣으면 $2b$10$pUV3FaX7vlPiy.2lLtXXI.gdicSlaQaWz4x4sIzjFrWoCaOPWN2sC 
이런식으로 암호화가 된다.
풀수 없는 비밀번호 키 값으로 변경된것을 알수가 있다.

 

 

 

728x90
LIST

'Node.js' 카테고리의 다른 글

Node.js Mongoose  (2) 2024.11.19
MongoDB의 설치 및 사용방법  (0) 2024.11.18
Node.js의 로직 순서  (0) 2024.11.12
Node.js 활용2  (0) 2024.11.11
Node.js POST 방식  (0) 2024.11.11