[TIL] 인증과 인가

이나현·2021년 7월 26일
0

개발지식

목록 보기
5/14
post-thumbnail

westagram에 추가하기

인증

  • 인증: 회원가입 + 로그인
    (유저가 어떤 유저인지 식별하는 것)
  • 필요성: 우리 서비스를 누가 쓰는지? 어떻게 사용하는지 추적이 가능하도록 하기 위해
  • 필요 요소: 아이디, 이메일, 비번
    (비밀번호: 너무 중요해서 특별하게 관리 필수!!)

비밀번호 관리:

  • database에 저장 시 개인 정보를 해싱하여 복원할 수 없도록 함
  • 통신 시 개인정보를 주고받을 때 SSL을 적용하여 암호화(HTTPS)

암호화 방법

1) 단반향 해쉬

  • 복원이 불가능한 단방향 해쉬함수는 암호학적 용도로 사용한다.
    (해쉬: 빨리 검색하고 빨리 찾기위해 만든 자료형)

  • ex. '1234' > 03ac674216f3e15~~~

  • 단점: 똑같은 비밀번호를 해싱하면 똑같은 값이 나와 유추가능

    => 단순해쉬값이 해킹에 쉽게 노출되기 때문에 salting이 생김
    <-> 양방향: 원본을 확인할 수 있는 값(주민번호 등)

2) salting & 키 스트레칭(key stretching-)

  • salting: 입력한 비밀번호와 임의로 생성한 문자열을 합쳐서 해싱해서 이 해시값을 저장하는 방법
  • 필요성: 유추하는 데 시간이 오래걸리도록 하기 위해서 필요
  • 키 스트레칭(key stretching): 계속 반복

3) bcrypt

  • salting & 키 스트레칭(key stretching)을 편하게 해주는 대표적인 라이브러리
  • hash 결과값에 소금값과 해시값 및 반복횟수를 같이 보관하기 때문에 db 설계가 간단해짐

인가

  • 사용자가 서버에 로그인하면 해당 사용자가 맞는지 확인하는 과정이 인가

  • 로그인한 사람이 추가적이 서비스를 사용했을 때 권한이 있는 사용자인지 확인

  • http의 특징? request/response 요청과 응답 & stateless한 성질

  • 서버는 사용자가 로그인 했을 경우, 로그인을 했다는 사실을 어떻게 알 수 있나? 바로 headers에 메타데이터를 보내서 확인
    (이 메타정보: json web token)

  • 요청 1의 응답 1에서 200 ok와 token 발행

  • 요청 2는 발행받은 token과 함께 요청 보냄
    (token은 로그인이 선행되어야 하는 다른 기능이 요청될 때 token을 사용)

JSON Web Token

헤더-내용- 서명 (증명장치)

헤더

  • 정보: 토큰 타입과 해시알고리즘 정보가 들어감

  • 해더의 내용은 base64방식으로 인코딩해서 JWT의 가장 첫 부분에 기록

  • 예시: {"alg": "HS256", "typ": "JWT"}

    내용(payload)

  • 내용에는 exp와 같이 만료시간을 나타내는 공개 클레임

  • 클라이언트와 서버간 협의하에 사용하는 비공개 클레임

  • 어떤 유저인지 알려줌

  • 예시: {"user-id": 1, "exp": 1539517391}

    서명(signature)

  • JWT가 원본 그대로라는 것을 확인할 때 사용하는 부분

  • 시그니쳐는 암호화함

  • 주의할 점: header와 payload는 인코딩한 것이므로 개인정보를 담아서는 안 됌.

profile
technology blog

0개의 댓글