열렬히.뛰기

인증과 인가

웹 프로그래밍 > 인증과 인가

인증과 인가

  • 인증 (authentication) : 사용자가 특정 사이트에 대해 권한을 받는 것. (즉, 로그인)
  • 인가 (authoriztion) : 사용자가 사이트 내에서 활동(CRUD)을 시도할 때 로그인됐는지 보고 허가를 주는 것.

HTTP는 비상태성이라는 특성을 갖는다. 서버는 클라이언트의 상태를 저장하지 않으며, 따라서 이전 요청과 다음 요청의 맥락이 이어지지 않는다. HTTP는 바로 직전에 발생한 통신을 기억하지 못한다. 따라서 HTTP 단독으로는 요청한 클라이언트가 이전에 이미 인증과정을 거쳤는지 알 방법이 없다.

그렇다고, 글을 조회하거나 작성할 때 마다 사용자에게 로그인을 하라고 요청할 수는 없는 노릇이다. 매 작업마다 로그인을 사용자에게 요청하는 것은 UX를 전혀 고려하지 않은 방식이다.

그렇다면, 사용자의 아이디와 패스워드를 브라우저에 그대로 저장해놓고, 매 요청마다 함께 그 정보를 보내는 방법은 어떨까? 이런 방식은 전송 데이터가 커져 비효율적일 뿐더러 클라이언트에 민감한 데이터가 그대로 저장되어 보안에도 굉장히 취약하다. 서버 입장에서도 매 작업마다 데이터베이스를 조회하고, 인증과정을 거치는 것이 비효율일 것 이다.

이런 HTTP 환경에서 서버는 어떤 방식으로 사용자를 인가할까? 웹 어플리케이션에서는 이 문제를 세션 또는 토큰을 사용하여 문제를 해결한다. 즉, 세션과 토큰은 인증 보다는 인가와 관련된 기술이라고 할 수 있다.

인증의 방식

  1. 세션 기반 인증
    1. 사용자가 로그인한다.
    2. 로그인하면, session id가 메모리(RAM)에 저장된다.
  2. 토큰 기반 인증
    1. 사용자가 로그인한다.
    2. 로그인하면, 토큰이 생성된다.
    3. 토큰은 클라이언트에 저장된다.