12. Authentication
9512 단어 IM-TILauthenticationIM-TIL
Authentication
Session
일정시간 동안 동일한 사용자에 대한 상태정보를 유지시키는 것 (사용자 정보 서버 상에서 관리)
- 서버와 클라이언트의 연결이 활성화된 상태
- 클라이언트 구분위해 각 client에 대해 session id를 부여하여 서버 측에서 관리
- 사용자의 정보 중 보안상 중요한 data는 session 관리
Cookie
사용자의 정보를 사용자 메모리(브라우저)에서 관리
- 서버가 사용자의 위치에 정보를 저장하고 불러올 수 있는 수단
- 이름, 값, 만료 날짜, 경로 정보 등으로 구성
- 특정 호스트에서 생성된 쿠키는 이 후 모든 요청마다 서버로 다시 전송
- 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
/cookie-tester
/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"}`)
로 확인해 보았다.
Author And Source
이 문제에 관하여(12. Authentication), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@xlsoh/12.-Authentication-Updating저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)