인증 & 인가

howyoujini·2021년 11월 22일
0

인증 Authentication

로그인

우리 서비스를 누가 쓰고, 어떻게 사용하는가, 추적이 가능하도록 하기 위해 필요함.

아이디, 이메일 주소, 비밀번호

비밀번호 : 주요 개인정보는 암호화되지 않으면 법적 처벌을 받음

데이터베이스에 저장시 개인정보를 Hashing하여 복원할 수 없도록 함.

Hashing 이란?

키 값에 직접 산술적인 연산을 적용하여 항목이 저장되어 있는 테이블의 주소를 계산하여 항목에 접근함. 키 값의 연산에 의해 직접 접근이 가능한 구조를 해시 테이블이라고 부르고, 해시 테이블을 이용한 탐색을 해싱이라고 한다.

  • 해싱에서는 자료를 저장하는데 배열을 사용함.
  • 어떤 항목의 탐색 키만을 가지고 바로 항목이 저장되어 있는 배열의 인덱스를 결정하는 기법
  • 각 탐색 키(매우 큼)를 작은 정수로 mapping 시키는 함수(=hash function)가 필요함.

단방향 해쉬 : 복구 불가능

본래 해쉬함수는 자료구조에서 빠른 자료의 검색, 데이터의 위변조 체크를 위해 쓰이지만

Salting

해쉬를 할때 (소금을 치듯이)

Key Strecthing

bcrypt : salting & Key Strecthing 의 대표적인 라이브러리

인가 Authorization

로그인 이후 "내 계정"으로 활동을 가능하게 허가해줌

: 사용자가 서버에 로그인하면 해당사용자가 맞는지 확인하는 과정이 인가

session

브라우저가 session ID란 이름의 쿠키(브라우저에 저장되는 정보)로 저장
다음 사이트에 요청을 보낼 때마다 쿠키를 보냄
서버에 로그인 되어있음이 지속되는 상태 = "세션"

단점 > 사용자 동시다발적이면 메모리 부족해짐, 휘발성임 (서버가 재부팅되면 메모리에 있던 것들이 다 날라감)

레디스, Memcached 등 메모리형 데이터베이스 서버

세션 정보가 날라가지 않게 넣어두는,
복잡한 구성과 환경에서 어떤 상태를 기억해야 함.

JWT (JASON web 'token') : 토큰방식

https://jwt.io/
객체형태, 딕셔너리 형태
서버가 기억하고 있지 않고 그냥 줘버림

http
바로 request/response 요청과 응답
stateless한 성질 = 저장하지 않는 성질
그래서
토큰을 줘서 계속 로그인 저장할 수 있게 함

aaaa.bbbbb.ccccc
헤더.내용.서명

서명 : jwt 원본그대로 라는 것을 확인할때 사용하는 부분

사용자가 로그아웃하면 토큰을 지워줘야함.
개발자도구 열어서 다 볼 수 있게 말고
안전하게 토큰을 전달해야함

profile
어떡해 ? 어떻게 ! 업글중

0개의 댓글