[Key Word]
사용자를 판단하고 (인증 authentication)
사용자에게 권한을 부여한다(인가 authorization)
SFA(Single Factor Authentication)
2FA(Two Factor Authentication)
MFA(Multi Factor Authentication)
▲인증요소의 분류와 관련된 개념
지식기반요소:based on 특정인이 알고 있는 정보(비밀번호같은)
소유기반요소:based on 특정인이 소유하고 있는 물건(OTP,휴대폰인증,공인인증서인증)
속성기반요소:based on 특정인의 고유 속성(지문,홍채인식)
SFA는 비밀번호 하나만 사용하는 경우
2FA는 비밀번호+휴대폰인증 사용하는 경우
MFA는 비밀번호+휴대폰인증+그림찾기 뭐 이런거 아닐까?
인증 : 식별 혹은 신원확인
server로 하여금 현재 request 를 보내는 사람이 누구인가!를 식별하는 것.
1.User가 입력한 자격증명정보(id, password)를 Server로 전송 및 인증 요청(request)
2. Server는 요청(request)와 자격증명정보를 토대로 Server와 연결된 user관련 DB를 참조하여 request를 보내는게 누군지 식별
인가 : 권한부여. 인증 프로세스가 없어도 권한부여가 가능한 것이 있음.
(cookie!!!-session storage에만저장(브라우저에만 저장))
1.User의 접근 권한 요청(request)
2.요청과 함께 전달받은 권한의 차등적 부여 관련 정보를 토대로 승인/거부
*권한의차등적부여관련정보: session에 정보를 저장, JWT, SAML(security assurance markup language), OAuth 같은 기술을 바탕으로
Authentication과 Authorization 인증 요청을 받았을 때, 식별하는 작업만(인증의 작업만)한다면, 추후 권한 요청이 있을 때마다 (페이지를 넘어간다던지, 포스트를 작성한다던지 등등과 같은) Database를 계속 돌려 권한 여부를 확인해야한다(페이지가 넘어갈 때마다 로그인을 하거나 본인 인증을 해야하는 상황이 생길수도)
사용자 인증(식별, authentication)이 완료되었을 때, 그 사용자(유저)에게 해당하는 권한을 준다면(마치 신분증을 건내주듯) 권한 요청이 있을 때 Server는 또 database에 연결하지 않고, 신분증만 확인하면 되기때문에 효율적임
사용자 요청(request)시, 권한의 차등적 부여 관련 정보를 server에 보내게 된다.
그 정보가 바로 JWT 이나 API key 이것을 신분증 같은 거라고 보면 되겠다.
찰떡같은 설명 감사합니다 ▶︎참고링크
<장점>
<단점>
Hashing Algorithm은 어떠한 input 이라도 fixed size의 array of numbers and letters 로 input을 convert 한다
-내가 넣은 비밀번호가 요상한 문자들로 변환되는 것이지!
"If an attacker were to crack the hash function, then the hacker could read all the password in the database" 해커들은 마음만 먹으면 어떻게든 해킹해낼 것이다.
그래서 우리는 Salting 과 Key Stretching이 필요하다
참고자료 ▶︎ 링크
해싱 HASH 함수 참고자료 ▶︎ 링크
해싱 HASH algorighem 참고자료 ▶︎ 링크
암호를 해시 처리한 후 사용자 ID와 함께 짝을 지어 데이터베이스 테이블에 보관해줍니다.
로그인 시, 입력한 암호는 해시 처리되어 데이터베이스 테이블의 해시 처리된 입력값과 비교됩니다.
두 값이 일치한다면, 짜잔! 사용자는 작업을 계속할 수 있습니다.
There are many formulas that can be used to hash a message.▼
영상자료 링크 ▶︎ 링크
A salt adds a string of characters to the user’s passwords to just before the password undergoes hashing.
The primary aim of stretching a password is to make deciphering the password more costly—whether with memory, time, or money—than an attacker can afford.
salting&key stretching 참고자료▶︎링크
해싱 HASH 함수 참고자료 ▶︎ 링크
해싱 HASH algorighem 참고자료 ▶︎ 링크
암호를 해시 처리한 후 사용자 ID와 함께 짝을 지어 데이터베이스 테이블에 보관해줍니다.
로그인 시, 입력한 암호는 해시 처리되어 데이터베이스 테이블의 해시 처리된 입력값과 비교됩니다.
두 값이 일치한다면, 짜잔! 사용자는 작업을 계속할 수 있습니다.
userId와 같은 것은 서버에만 PrivateClaim에 들어가야 한다는 것?
로그인 시 발급,
알고리즘은 백엔드에서 -> 암호화하는 것
정보를 저장하는 것은 frontEnd에서? -> 받은 token을 어떻게 처리할지.
→ 그 결과로 회원가입/로그인 진행