12. Authentication

xlsoh·2020년 10월 28일
0

TIL

목록 보기
22/23
post-thumbnail

Authentication

Session

일정시간 동안 동일한 사용자에 대한 상태정보를 유지시키는 것 (사용자 정보 서버 상에서 관리)

  • 서버와 클라이언트의 연결이 활성화된 상태
  • 클라이언트 구분위해 각 client에 대해 session id를 부여하여 서버 측에서 관리
  • 사용자의 정보 중 보안상 중요한 data는 session 관리

사용자의 정보를 사용자 메모리(브라우저)에서 관리

  • 서버가 사용자의 위치에 정보를 저장하고 불러올 수 있는 수단
  • 이름, 값, 만료 날짜, 경로 정보 등으로 구성
  • 특정 호스트에서 생성된 쿠키는 이 후 모든 요청마다 서버로 다시 전송
  • client -- request POST/ LOGIN --> server
  • server -- response POST/LOGIN set-cookie; token: session_token --> client
  • client -- request GET/ INFO cookie; token: session_token --> server
  • server -- response GET/ INFO cookie; token: session_token --> client

Token

인증을 위해 사용되는 암호화 문자열

  • http통신의 stateless 특징과 알맞음
  • 유저의 인증 정보를 server, session에 저장하지 않음
  • 유저의 활성화 여부와 상관없이, 넘겨진 요청에 담겨진 token의 정합성만 확인
  • 서버가 클라이언트의 요청만으로 작업처리하여 상태관리 비용 x, 서버 확장에 용이함
    ( stateless: server side에 client와 server의 동작, 상태정보를 저장하지 않는 형태, server의 응답이 client와의 세션 상태와 독립적임
    sateful: server side에 client와 server의 동작, 상태정보를 저장하는 형태, 세션 상태에 기반하여 server의 응답이 달라짐 )

Encryption

암호화

  • client --- pw:'abcd' ---> server
  • server --- pw: 'diofhsoagab' (암호화) ---> server
  • DB --- pw: 'diofhsoagab' ---> server

Hashing

어떠한 문자열에 '임의의 연산'을 적용하여 다른 문자열로 변환하는 것

  • 오래걸리지 않아야 함
  • 고유한 해시 값 가져야 함
  • 원본과 완전히 다른 값을 가져야 함

Salt

해시 하려는 값(원본)에 추가하는 값

  • 알고리즘을 통한 원본 역추적 방지
  • ( 암호화 하려는 값 ) + ( salt 값 ) => ( hash 값 )

Crypto (Node.js)

node.js 내장 암호화 모듈 [공식문서]

사용법

const crpto = require ('crypto');
const secret = 'abcdefg';
const hash = crypto.createHmac ('sha256', secret)
                   .update ('I love cupcakes')
                   .digest ('hex');
  • 'sha256' : 알고리즘 방식
  • secret : salt
  • 'I love cupcakes' : hashing 할 값
  • 'hex' : 인코딩 방식
    값 + salt => 알고리즘으로 값 변환 => 변환 값을 입력 받은 방식으로 인코딩 => hash 값

mini- auth -server sprint

/session-tester

(암호화는 http stateless 특성을 가지지만, 이 스프린트는 stateful로 진행)

  • 사용자의 브라우저에 세션 아이디(토큰)을 쿠키로 심기
http.createServer((request, response) => {
  ...
  response.writeHead(200, {
          'set-cookie': `session_id=${token}`,
        })
  ...
  • 서버 세션에 쿠키(토큰) 존재하는 지 확인
let SESSIONS = [];
...
let credential = querystring.parse(body);
let token = SHA256(credential.username).toString();
SESSIONS.push(token);
        response.writeHead(200, {
          'set-cookie': `session_id=${token}`,
        })

로 넣어주었던 것을

let cookieObj = querystring.parse(request.headers.cookie, '; ');
let testToken = cookieObj.session_id;
console.log(`${SESSIONS.includes(testToken) ? "true" : "false"}`)

로 확인해 보았다.

profile
주니어 프론트엔드 개발자

0개의 댓글