new TIL. 인증&인가

유자탱자🍋·2021년 3월 8일
0

인증(Authentication)

유저의 identification을 확인하는 절차

비밀번호 암호화

  • 단방향 해쉬 함수(one-way hash function)
    : 원본 메시지를 변환하여 암호화된 digest를 생성한다. 암호화된 메시지로는 원본 메시지를 구할 수 없는 단방향성을 지닌다.


A hash function is any function that can be used to map data of arbitrary size to fixed-size values. The values returned by a hash function are called hash values, hash codes, digests, or simply hashes. [출처_wikipedia]

  • Bcrypt
    : 단방향 해쉬 함수의 취약점을 보완하기 위해 사용되는 두 가지 기법(Salting & Key Stretching)을 구현한 함수


- Salting: 실제 비밀번호 이외에 추가적 랜덤 데이터를 더해 digest를 구하는 방법
- Key Stretching: 단방향 해쉬 함수를 통해 계산 후 digest를 또 다시 해쉬하는 것을 반복하는 방법


JWT(JSON Web Tokens)

로그인 성공 후 access token(암호화된 유저 정보)를 첨부하여 request를 보낸다.

Stateless한 HTTP의 특징 때문에 각각의 HTTP 통신은 독립적이기 때문에 로그인 이후 access token을 담아 매 통신마다 요청을 보내야 한다.

access token을 생성하는 기술 중 하나가 바로 JWT! 유저의 정보를 담은 JSON 데이터를 암호화하여 클라이언트와 서버 간 주고 받는 것이다.

id/pw 대신 access token을 사용하는 이유는?
[Performance 측면]
- No heavy bcrypt call, just a simple hash

[Client-side storage 측면]
- No actual ID and password stored in the client such as cookie.
- Also, token is very server specific - not reused in any other site.



인가(Authorization)

유저가 요청하는 request를 실행할 수 있는 권한이 있는 유저인지를 확인하는 절차.

  1. 인증 절차를 통해 access token 생성
  2. access token을 담아 request
  3. 서버는 access token 복호화
  4. 복호화된 데이터를 통해 서버에서는 유저 정보를 얻음
  5. DB에서 해당 유저의 권한 확인
  6. 권한이 부여된 유저라면 request 승인
  7. 아니라면 Unauthorized Response(401) 혹은 다른 에러 코드 보냄


대부분의 웹 사이트에서 필수적으로 포함되어있는 기능, 인증&인가의 프로세스를 파악할 수 있었다!👩‍💻
backend와 어떻게 협업이 이루어지는지 하나하나 알아가는 것 같아 두근두근거린달까?ㅎㅎ

0개의 댓글