TIL No.16 쎄션 인증&인가

Seunghyun Yoo·2021년 2월 7일
0

인증과 인가

인증 (Authentication)

  • 인증은 회원가입과 로그인을 말합니다.
  • 인증은 왜 필요할까?
    - 우리 서비스를 누가 쓰는지? 어떻게 사용하는지? 추적이 가능하도록 하기위해 필요
  • 인증에 필요한것은 무엇이 있나요?
    -아이디, 이메일주소, 비밀번호 등
    -가장 중요한 것은 비밀번호
    • 법적으로 개인정보를 암호화 하게끔 정해져있음
    • 비밀번호는 복구가 불가능한 형태로 문구가 쓰여짐

암호화 예시

ex) 장바구니, 회원등급, 구독형 등등

암호화는 어떻게 할까?

해쉬란?
자료구조의 일종으로, 빠른자료 검색, 데이터의 위변조 체크를 위해 쓰이지만
복원이 불가능한 단방향 해쉬함수는 암호학적 용도로 사용한다.

암호화 함수는 MD5, SHA-1, SHA-256(현재는 이방법으로 많이 씀) 등이 있음

MD5, SHA-1는 유추가 가능한 비밀번호 구조이기에
최근 생긴 개념은

SALTING & KeyStretching

SALTING

  • 단순해쉬값이 해킹에 쉽게 노출되기 때문에 Salting 이라는 아이디어가 생겨남
    1. 비밀번호 문자열 사이사이에 랜덤한 문자열을 추가해서 넣는다

KeyStretching

  • salting 값의 임의의 문자열을 무작위로 길게 늘린다 (이유는 해커들이 해석하는 시간이 오래걸리게 할 수 있게끔)

bcrypt

SALTING & KeyStretching의 대표적 라이브러리

인가

인가(Authorization)란?

  • 사용자가 서버에 로인하면 해당 사용자가 맞는지 확인하는 과정이 바로 인가
  • HTTP의 특징은 무엇일까요?
    앞에서 보낸 Request는 기억을 못함

서버는 사용자가 로그인 했을 경우, 로그인 했다는 것을 어떻게 알 수 있을까?
-> 바로 headers에 메타 데이터를 보내서 확인함.
이 메타정보를 바로 JSON Web Token 일명 'JWT'라고 함.

웹토큰의 구조


1. 헤더
2. 내용

  • exp와 같이 만료시간을 나타내는 공개 클레임
  • 클라이언트와 서버간 협의하에 사용하는 비공개 클레임
  • 위 두가지 요소를 조합하여 작성한 뒤 BASE64 인코딩 하여 두번째 요소에 위치함.
  • 예시 : {"user-id" : 1, "exp": 1539517391}
  1. 서명
  • JWT가 원본 그대로라는 것을 확인할 때 사용하는 부분

  • 시그니쳐는 BASE64URL 인코드 된 header, payload 그리고 JWT secret(별도 생성)을 헤더에 지정된 암호 알고리즘으로 암화하 하여 전송 (복호화 가능)

  • 프론트엔드가 JWT를 백엔드 API 서버로 전송하면 서버에서는 전송받은 JWT의 서명부분을 복호화 하여 생성한 JWT가 맞는지 확인

  • 마치 계약서의 위변조를 막기위해 서로 사인하는 것과 같음

    Wrap-up

  1. 인증이란?
  2. 단방향 해쉬란? <-> 양방향
  3. 솔팅 앤 키스트레칭
  4. bcrypt. 암호화 알고리즘으론 sha-256
  5. 인가란?
  6. JSON Web Token (JWT)
profile
기본을 중요하게 생각하는 프론트엔드 개발자 유승현입니다! 🙋🏻‍♂️

0개의 댓글