기타

wecode 4주차 인증&인가

알파빗 2022. 10. 17. 09:38

인증&인가

 

회원가입 - 암호화해서 데이터 저장

로그인 절차 - 입력한 비밀번호를 암호화해서 저장된 데이터와 비교

 

매 세션마다 로그인할수는 없으니 stateul상태를 유지하기 위해서 session cookie toekn 같은 기술 사용

 

session - 클라이언트가 브라우저를 통해 웹서버에 접속하는 시점으로부터 브라우저를 종료해 연결을 끝내는 시점 동안 클라이언트와 웹서버가 논리적으로 연결된 상태

서버는 세션 정보를 저장, 클라이언트에게는 세션을 구분할 수 있는 세션 id 부여 

클라이언트 request 보낼때 세션 id를 보내 클라이언트 상태 확인

쿠키 - 로그인 유지x 장바구니 넣기 가넝 ,이전 기록 상태정보를 담아놓음

 

인증 flow

 

사용자의 인증과정 요청

인증 완료시 세션 정보를 서버 메모리에 저장

해당 세션 식별가능한 세션 id발급

발급한 세션 id 사용자에게 전달

전달받은 걸 브라우저의 쿠키에 저장

사용자가 request를 서버에 보낼 때 세션 id 함께 전달

서버는 사용자가 보낸 세션 id와 서버 메모리에서 관리하고 있는 세션 id 비교 후 권한부여

 

session 기반 인증

장점 -세션 id 자체에 유의미한 개인정보가 없음 서버에서 정보관리해 데이터 손상우려에 상대적 안전

서버에서 상태를 유지해 로그인 여부 확인 쉬움 경우에 따라 강제 로그아웃 가능

단점 -  서버 부하증가 사용자가 증가해(트래픽 증가) 서버의 scale out(서버 대수 늘리기-> 세션은 랜덤으로 들어가기때문에(알고리즘이 잇긴함) 1번 서버에 있다가 100번서버로 갈수있으니까) 해야할때 세션 관리가 어려워짐

 

 

토큰

토큰을 가지고 잇으면 해당 서비스를 이용할수있는 권리가 잇다고 간주

제한된 리소스에 대해 일정기간 동안 접근할수있는 권한 캡슐화

일반적으로 문자열형태로 발급

접근할수잇는 리소스의 범위와 접근가능 기간/통제 가능

 

토큰 기반 인증

사용자의 인증과정 요청

사용자 식별정보가 담긴 토큰 발급

발급한 토큰은 response body에 담아 사용자에게 전달

발급된 토큰 local storage에 저장

사용자는 request할때마다 저장된 토큰을 header에 포함시켜 서버로 전달

서버는 사용자로부터 전달받은 토큰 정보를 verification한 뒤 해당유저에 권한 부여

 

 

특징

장점 -토큰을 사용자 측에서 저장해 서버 메모리/db 등의 부담이 없음

사용자의 상태 정보를 서버에서 관리 안해서 scale out 용이

토큰 만료시간 짧게 해서 안정성 증가

단점- 로그인여부/강제로그아웃 제제 불가

임의로 사용자가 토큰 수정/구조변경시 서버에서 확인불가

payload부분에 사용자 식별을 위한 여러정보가 포함되어있어 session id길이보다 길어져 http request 전송 데이터의 크기가 증가

xss공격에 취약해 payload에 민감한 정보를 포함하는 경우 위험

 

이점

stateless - 서버측에서 상태 정보관리x 사용자측에서 관리해 서버상

scalability -서버의 상태를 stateless하게 유지되기 때문에 사용자와 서버 사이에 관계가 없음

관계 존재x -> 서비스를 운영중인 어떤 서버로든지 request 보낼수 있고 서버확장에 유리

security - 서버로 요청 보낼 때 쿠키 전달 x-> CSRF 공격 방지에 도움

extensibibilty -토큰 기반 인증시스템에서 토큰을 통한 권한범위 지정 가능 소셜계정으로 다른 웹사이트 로그인 가능하게함

 

암호화종류

단방향 암호화 - 암호화하면 되돌릴수없음

-한계 동일한 평문-동일한 해시값

-해시값을 정리한 레인보우 테이블을 이용해 사용자 정보 해킹

 

솔팅 & 키스트레칭

솔팅-원본 데이터에 랜덤한 데이터 추가 -> 원본과 다른 해시값을 가짐

키스트레칭 - 해시 1번x 여러번 해시값을 다시 해시하는 방식으로 진행

솔트값 저장해서 로그인 입력시 그 솔트값으로 붙여서 내보냄

 

대칭키 암호화 -암호화된거 복호화가능 

but 키를 잃어버리거나 해킹되면  와르르-> key pair (public key / privite key)

 

데이터 암호화 - 비대칭키 암호화를 이용해 데이터를 암호화하는 과정 

->서버는 key pair 발급 후 public key 전달, 사용자 데이터 암호화시 public key 서버 암호화데이터 private key로 복호화해 내용확인

-> 데이터가 노출되어도 데이터 복호화 불가

 

 

전자서명 - public key 역발상. 서명자만 private key 전달받은 자 public key

 

 

bcrypt

salting & keyStretching 적용된 대표적인 패키지

구조 - (알고리즘)(ocst facor)(salt)(hashed password)

단방향 해시 알고리즘 --> 입력값을 암호화해 기존값과 비교

 

 

JWT

(header)(payload)(signature)

사용자와 서버 간에 정보를 JSON개체로 안전하게 전송하기 위한 개방형 표준 

secret key 나 public/private pair

데이터 신뢰성 보장에 사용(숨기기x)

payload -registered claims(지정) public claim(공개적으로 정의) private claim(서버와 합의해서 쓰는) /사용자의 정보가 들어있으면 안됨

signature - 전달 받은 토큰 비교