[Backend] Token + Promise

노호준·2023년 3월 8일
0

🦋 해싱

  • 가장 많이 쓰이는 암호화 방식
  • 해시함수로 암호화만 가능, 복호화는 안됨
  • 특징
    • 항상 같은 길이의 문자열을 리턴한다.
    • 서로 다른 문자열에 동일한 해시 함수를 사용하면 반드시 다른 결과값이 나온다.
    • 동일한 문자열에 동일한 해시함수를 사용하면 항상 같은 결과값이 나온다.
  • 레인보우 테이블 : 해쉬함수 거치면 항상 같은 결과값이 나옴을 이용해 해시함수 거치기 전 값을 기록한 테이블
  • Salt : 레인보우테이블을 방지하기 위한 것, 해싱 이전값에 임의의 값을 더해 이전값을 알아내기 어렵게 만드는 방법
  • 사이트관리자는 사용자의 비밀번호를 모른다. 비밀번호를 해싱하여 저장하고 사용자가 해싱한 값끼리 비교해서 일치한지 따진다. 이처럼 민감한 데이터를 다룬다.

🦋 토큰

  • 교통승차권처럼 서비스 사용에 대한 권한정보를 포함한 암호화된 문자열
  • 세션기반 인증방식의 한계를 극복하기위해 등장
  • 서버의 부담을 줄일 수 있는 인증방법
  • 유저정보를 암호화하여 클라이언트에 저장
  • 무상태성, 확장성, 권한부여에 용이
  • JWT : 대표적인 토큰기반 인증기술
  • 토큰은 점을 기준으로 Header, Payload, Signature로 나뉜다.

  • header, payload에는 주요정보가 담기면 안된다. decode가 그대로 되기때문. 시그니처에 secret값(salt)가 더해져야만 토큰해석 불가가 된다.
  • 단점
    • 무상태성 : 인증관리주체가 서버가 아니므로 토큰이 탈취되어도 토큰을 만료시킬 수 없음
    • 유효기간 : 토큰탈취를 대비해서 유효기간을 짧게 설정하면, 사용자는 토큰만료때마다 다시 로그인해야함
  • 단점 극복을 위해 액세스토큰과 리프레시 토큰을 함께 사용하곤 한다.

🦋 또romise 정리

  • 비동기 : js의 특징, 코드가 위에서 아래로 순차적으로 실행되지 않는다.
  • 콜백함수 : 함수의 인자로 들어가는 함수, 동기적으로 작동시키기 위해 자주 사용된다.
  • 프로미스 : 비동기 처리를 위한 객체
function getData() {
  return new Promise(function(resolve, reject) {
    $.get('url 주소/products/1', function(response) {
      if (response) {
        resolve(response);
      }
      reject(new Error("Request is failed"));
    });
  });
}

// 위 $.get() 호출 결과에 따라 'response' 또는 'Error' 출력
getData().then(function(data) {
  console.log(data); // response 값 출력
}).catch(function(err) {
  console.error(err); // Error 출력
});
  • fetch : url에서 정보 따오는 함수, 프로미스 객체를 반환
function fetchItems() {
  return new Promise(function(resolve, reject) {
    var items = [1,2,3];
    resolve(items)
  });
}

async function logItems() {
  var resultItems = await fetchItems();
  console.log(resultItems); // [1,2,3]
}
  • async,await : 콜백함수대신 동기적으로 작동을 편하게 해주는 문법, 프로미스객체를 객체로 바꿔줌, fetch랑 쓰기도 함
function fetchUser() {
  var url = 'https://jsonplaceholder.typicode.com/users/1'
  return fetch(url).then(function(response) {
    return response.json();
  });
}

function fetchTodo() {
  var url = 'https://jsonplaceholder.typicode.com/todos/1';
  return fetch(url).then(function(response) {
    return response.json();
  });
}

🦋 기타 복습

  • res.어쩌고 는 express에서 제공하는 함수
  • module.exports로 객체를 내보내고 require로 변수에 넣는다.
//db 폴더의 data.js
module.exports = {
  USER_DATA: [
    {
      id: '0',
      userId: 'kimcoding',
      password: '1234',
      email: 'kimcoding@authstates.com',
      name: '김코딩',
      position: 'Frontend Developer',
      location: 'Seoul, South Korea',
      bio: '경제적, 사회적 배경에 상관없이 누구나 잠재력을 발휘할 수 있도록 현장에 필요한 교육을 제공합니다.',
    },
  ],
};
//login.js에서 변수를 쓰고싶다면
const { USER_DATA } = require('../../db/data');
  • 응답전송
    return res.status(401).send("Not Authorized")

0개의 댓글