회원인증 방법론
1.session-based
로그인 => 서버는 쿠키를 발행함
쿠키=브라우저에 저장할 수 있는 긴 문자열(쎼션아이디가 적힌문자열)
그러면 브라우저는 쿠키를 저장합니당
마이페이지보여주셈 =>(로그인했니?)자동으로 쿠키몰래보냄(sesson-id) session memory
=>마이페이지.html로보냄
큰특징이뭐냐면
로그인했다는 정보를 서버에 다저장함 장점이자 단점임
2.token-based(JWT)
로그인 => id/pw 로그인함 ->(JSON Wen Token)암호화된 긴 문자열을 클라이언트가 저장함 (access token)
=>마이페이지보여주셈(로그인했니?)=>WebToken을 헤더에 저장해서보냄=>서버(어? 너 토큰이있구나 유효한지 검사좀함 유통기한안지남? 오키통과)(refresh token) =>access token
=>마이페이지.html
특징
유저들 로그인 상태를 저장할 필요없음
열쇠같은거임 이페이지주세요 저페이지주세요라고 요청할 수 있음
rest stateless해야한다 이거랑 동일한선상임
3.Open Authentication(OAuth)
Google의 프로필 정보를 가져옴 ㅇㅋ?
동작방식
로그인버튼을 누름 => 구글팝업이 뜸(승인하시겠습니까?) =>동의누름=>email,이름,성별=> 계정만들기 세션만들기 jwt발급 등등
버튼하나만 누르면 됌 편함
단점
소셜로그인이 있었는데 없어지면 못씀
HTTPS
기존꺼 암호화한거임
인증서
데이터 제공자 신원을보장하고 도메인 종속
인증서보냄=>인증서 도메인 =서버도메인(ㅇㅋ 통과) but 해커의 제 3자 공격으로 인한 도메인 공격으로인해 도메인이 바뀌면 알수있음
ca
공인 인증서 발급 기관
각브라우저마다 인증서가 차이가있음
비대칭 키 암호화
전혀 다른한쌍으로 복호화가가능
키 A로 암호화했다면 키B로만 복호화가 가능함
공개키 방식은 처리가 많아서 초기에만 사용함
HANDS Shake
서로 확인 공개키 전달
비밀키 생성
키제작용 랜덤스트링전송 이걸로 비밀키만듬
세션키로 암호화 된 메세지를 전달함 상호키 검증
https 연결 성립
해싱hashing
이메일 공개가능
패스워드는 하나의 관리수단
데이터베이스에 암호화해서 저장
모든값에 대해 해시값을 계산하는데 오래걸리지 않아야한다
최대한 해시 값을 피해야 하며 , 모든 값은 고유한 해시 값을 가진다.
아주 작은 단위의 변경이라도 완전히 다른 해시값을 가져야 한다.
Salt
암호화해야하는값에 어떤 별도의 값을 추가하여 결과를 변형하는거임
1.암호화된 해놓는다면 해시된 결과가 늘 동일
해신된 값과 원래 값을 테이블로 만들어서 decoding 해버리는 경우도 생긴다.
2.원본값에 임의에 약속된 '별도의 문자열'을 추가하여 해시를 진행한다면
기존 해식밧과 전혀 다른 해시값이 반환되어 알고리즘이 노출되더라도 원본값을 보호할 수 있도록 하는 안전 장치
3.기존(암호화 하려는 값) =>{hash}
salt사용 암호화 하려는 값 +salt 용 값 => hash값
1.유저와 패스워드 별로 유일한 값을 가져야합니다
2.사용자 계정을 생성할 때와 비밀번호를 변경할 때 마다 새로운 임의의 Slat를 사용해서 해싱해야 합니다.
3.salt는 절대 재사용하지 말아야 합니다.
4.salt는 db의 유저 테이블에 같이 저장되어야 합니다,.
쿠키
statelss인데 정보가유지되는 이유
서버가 웹브라우저에 저장할수있는 수단
삭제하지않는다면 사라지지않는다
사용자 선호,테마, 장시간 보존해야하는 정보저장에 적합
도메인
패스
유효기간설정
쿠키접근가능여부설정
등등
pac방에서 로그아웃을 안한경우
expires 옵션을 통해 유효기간을 지정하면
일정시간후 자동소멸함
http Only 쿠키는 script 태그로 접근가능
민감한 정보나 개인정보는취약함
csrf samesite옵션으로 방지할수있다.
lax get메서드 요청만 쿠키전송가능
strict 쿠키전송분ㄹ가
none 모든메서드요청에 대해 쿠키 전송가능 ->Secuer 쿠키옵션필요
Session 서버가 Client에 유일하고 암호환된 id를 부여
중요 데이터는 서버에서 관리
Cookie와 Session의 차이점
Cokie 서버에 부담을 덜어줌 쿠키 그자체는 인증이 아님
클라이언트에저장
http의 stateless한 것을 보완해주는 도구임
Session 신뢰할 수 있는 유저인지 서버에서 추가로 확인이 가능
서버에 저장
접속 상태를 서버가 가짐
stateful
서버에 다저장해서 사용자가 많아질수록 서버가 느려짐
XSS 공격으로 인해 세션쿠키가 탈취되면 다 탈취
서버만드는 흐름을 대충 리마인딩해보자
클라이언트는 서버에 요청을 보내고 서버는 데이터를 db에저장한다
나머지는 역순
이때 데이터가 갈때마다 쿠키라는녀석을통해간다 쿠키만 쓰면 해킹이 쉬우니까 업그레이드된 쎼쎤이라는 녀석에 담아서 보낸다. 이녀석은 브라우저에 있는 ca라는녀석이 보통 검사를해준다.
node.js?
'인증,암호' 카테고리의 다른 글
대칭키와 비대칭키 , 전자서명 간단히 정리 (0) | 2022.05.13 |
---|---|
[Session,token,cookie,jwt] 차이점 과 의미 (0) | 2022.04.23 |
암호학 (0) | 2022.04.05 |