인증과 인가

Q. 인증(Authentication)과 인가(Authorization)란 무엇인가요?

A. 인증(Authentication)은 사용자가 본인이 주장하는 대로 자신임을 인증하는 과정입니다. 일반적으로 아이디와 비밀번호를 입력하여 로그인하는 것이 인증의 예입니다. 반면, 인가(Authorization)는 인증된 사용자가 특정 자원이나 기능을 사용할 수 있는 권한이 있는지 확인하는 과정입니다. 예를 들어, 일반 사용자가 관리자 페이지에 접근하는 것은 인가되지 않은 것입니다. 인가는 일반적으로 역할(Role)과 권한(Permission)을 기반으로 수행됩니다. 역할은 사용자 그룹을 의미하며, 권한은 해당 역할에 대해 부여된 권한을 의미합니다. 즉, 역할을 기반으로 권한을 관리하여 인가를 수행합니다.

Q. 왜 인증 방식이 필요한 가요?

A. HTTP의 비연결성과 비상태성이라는 특성 때문에 인증 방식이 필요합니다.

Session이란?

  • Session은 사용자의 상태를 관리하는 기술로, 같은 사용자로부터 일련의 요청을 하나의 상태로 유지시키는 것입니다. 연결은 방문자가 웹 브라우저를 종료함으로써 끝납니다.
  • HTTP의 비연결성과 비상태성으로 인해 인증 방식이 필요합니다. 인증은 사용자가 본인이 주장하는 대로 자신임을 인증하는 과정이고, 인가는 인증된 사용자가 특정 자원이나 기능을 사용할 수 있는 권한이 있는지 확인하는 과정입니다.
  • 세션과 쿠키는 인증 문제를 해결하기 위해 사용됩니다. 세션은 서버에서 사용자의 상태를 관리하고, 쿠키는 클라이언트에서 사용자의 상태를 관리합니다. 세션은 보안성이 높지만, 서버 자원을 많이 사용합니다. 쿠키는 보안성이 낮을 수 있지만, 서버 자원을 적게 사용합니다.

Cookie란?

  • 쿠키(Cookie)는 클라이언트 측에서 사용자의 상태를 관리하는 기술로, 브라우저에 저장됩니다. 서버에서 응답(Response)을 보낼 때, Set-Cookie 헤더를 사용하여 클라이언트에게 쿠키를 전송할 수 있습니다. 그러면, 클라이언트는 이후 요청(Request)에서 해당 쿠키를 서버에게 전송하여 사용자의 상태를 유지시킬 수 있습니다.

JWT란?

  • JWT(Json Web Token)는 웹 표준으로 지정된 JSON 기반의 토큰입니다. JWT는 클라이언트와 서버 간의 정보를 안전하게 전송할 수 있도록 해줍니다. JWT는 페이로드(Payload)와 시그니처(Signature)로 구성되어 있으며, 페이로드는 정보를 담고 있고, 시그니처는 해당 정보가 유효한지 확인하는 데 사용됩니다. JWT는 세션과 쿠키와 같은 인증 방식을 대체하여 사용될 수 있습니다.
  • 왜 JWT를 사용하는가?이 방법은 HTTP 프로토콜을 사용하여 통신을 합니다.
    1. Conncetionless ⇒ 연결을 유지하지 않는다.
    2. Stateless ⇒ 상태를 유지하지 않는다.
    3. : 서버와 클라이언트는 첫번째 통신을 하고 나서 두번째 통신을 할 때는 이전의 통신에 대한 정보를 가지고 있지 않음. → 즉, 새롭게 갱신을 해줘야함.그렇다면 로그인은 어떻게 처리를 해줘야 할까요?
    4. 로그인 처리 방법
    5. : 서버와 클라이언트가 한번 통신이 일어나고 나면 그 연결이 유지가 되는 것이 아니라 바로 끊어짐.
    6. DB에 USER ID와 PASSWORD 비교하여 로그인하기
      • 이 방법은 로그인 유지가 안될 뿐더러 정보가 유지되지 않으면, 매번 페이지를 이동할 때마다 로그인을 다시 해주거나 상품을 선택했는데 구매 페이지에서 선택한 상품의 정보가 없거나 하는 일이 발생 할 수 있음.
      • Sessiong(세션) 과 Token(토큰)세션 방식 → 서버의 메모리, 데이터베이스와 같은 서버의 자원들을 사용해서 사용자의 정보를 유지시키는 방식임.토큰 방식서버에 저장하지 않아서 서버에 확장성이 있음.
    7. 위에서 말한것처럼 로그인을 했을 때 해당 서버에만 요청을 보내는 것이 아닌 요청이 들어왔을 때 해당 토큰이 유효한지만 체크하면 됨.
    8. 토큰 방식은 사용자가 로그인을 하면 서버에서 발행해주는 토큰을 가지고 브라우저의 저장소에 토큰을 유지시키는 방법임. 여기서 말하는 토큰이 우리가 말하고자하는 JWT임.
    9. 토큰보다 보안에 강하다는 장점이 있지만 단점으로 서버의 확장성이 떨어지고, 서버의 자원(세션을 저장, 유지할 공간) 이 많이 필요함. 또한 세션이 서버에 저장이 되고, 트래픽 분산을 위해 여러대의 서버를 사용할 때, 만약 사용자가 로그인을 했을 때는 만들어진 세션을 참조해야 하기 때문에 처음 로그인한 그 서버에서만 요청을 보내야한다는 단점이 있음.
  • HTTP 프토토콜은 두 가지 특성이 있습니다.
  • “로그인” 이라는 과정은 “서버와 클라이언트가 데이터를 주고 받는 통신 방법”이 필요합니다.
  • JWT란?
    • 구성
      • Header
      • JWT를 검증하는데 필요한 정보를 가진 JSON을 BASE64 알고리즘 기반으로 인코딩한 문자열이며 검증을 하기 위한 내용을 가지고 있음.
      • Payload
        • Payload는 암호화되지 않기때문에 비밀번호와 같은 민감한 값을 넣으면 안됨.
      • JWT에 저장된 값이며, (name,value)의 쌍으로 이루어져 있고, JWT에는 이 값들을 여러개 할당할 수 있음.
      • Signature
      • JWT를 인코딩하거나 유효성 검증을 할 때 사용하는 암호화된 코드임.
    • Header - Payload - Signature
  • JWT는 Client 와 Server 사이 통신 시 권한을 인가하기 위해 사용하는 토큰임.

RefeshToken과 AccessToken 의 관리는 고려...

'Web' 카테고리의 다른 글

RESTful API 란?  (0) 2024.03.05

+ Recent posts