[Web] 인증과 인가

이승연·2020년 12월 7일
0

Web/Network

목록 보기
6/10
post-thumbnail

인증 (Authentication)

  • 인증이 필요한 이유: 우리 서비스의 사용자 및 사용자 행동양식 파악을 위해
  • 비밀번호가 제일 중요함: 법규상의 강제 및 개인정보 보호를 위해
  • Database에 저장 시 개인 정보를 해싱하여 복원할 수 없도록 함

암호화 방법

  • 단방향 해쉬란?
    • 본래 해쉬함수는 자료구조에서 빠른 자료의 검색, 데이터의 위변조 체크를 위해서 쓰이지만 복원이 불가능한 단방향 해쉬함수는 암호학적 용도로 사용합니다.
    • SHA-256의 예: 1234를 해싱하면 굉장히 복잡하고 문자열+숫자의 조합이 나오는데 문제는 1234라는 비밀번호는 언제나 그 해쉬가 나오기에 역추적이 가능하다는 것.
    • 따라서 모든 경우의 수에 대한 해쉬값을 생성해놓은 Rainbow Table이라는 것이 나오게 됨 --> Rainbow Attack 문제
    • 이같은 허점을 보완하고자 salting과 Key Stretching이라는 아이디어가 생겨남. 비밀번호와 임의로 생성란 문자열(Salt)를 합쳐서 해싱하여 이 해시값을 저장하는 방법임.
  • Salting & Key Stretching
    • 입력한 비밀번호와 임의로 생성한 문자열(Salt)를 합쳐서 나오는 해시값을 저장하는 방법이 Salting
    • 이것도 슈퍼 컴퓨터를 돌리면 풀리긴 풀리지만 필요한 시간을 최대한으로 늘리기 위해 Salting 및 해싱을 여러번 반복해서 원본 값을 유추하기 어렵게 만드는 것이 Key Stretching.
    • bcrypt: Salting & Key Stretching 대표적 라이브러리
      • bcrypt는 hash결과값에 소금값과 해시값 및 반복횟수를 같이 보관하기 때문에 DB설계를 복잡하게 할 필요성이 사라짐!

인가 Authorization

  • 사용자가 서버에 로그인 하면 해당 사용자가 맞는지 확인하는 과정이 바로 인가
  • Http의 특징: 1. Request/Response 2. Stateless
  • 로그인을 하면 백엔드에서 JSON Web Token(JWT)를 발행하고 로그인하면 프런트에게 토큰을 body에 실어서 보낸다., 토큰은 request의 headers에 저장된다. 내가 다시
  • JSON Web Token(JWT): 웹에서 인증 인가를 할 때 쓰이는 암호화 과정
  1. 헤더: (인코딩)
  2. 내용: (인코딩)만료시간을 나타내는 공개 클레임과 크랑이언트와 서버간 협의하에 사용하는 비공개 클레임을 조합하여 BASE64 인코딩하여 두번째 요소로 위치한다.
  3. 서명: (복호화)JWT가 원본 그대로라는 것을 확인할 때 사용하는 부분. 프론트엔드가 JWT를 백엔드 API 서버로 전송하면 서버에서는 전송받은 JWT의 서명부분을 복호화하여 서버에서 생성한 JWT가 맞는지 ghkrdls인함. 마치 계약서의 위변조를 막기 위해 사인하는 것과 같다고 생각하면 됨.

0개의 댓글

관련 채용 정보