인증하는 방식들

  • 인증을 확인하는 방법으로 api key, Oauth, jwt에 대해 간단하게 정리해보았다.

API Key

  • API Key는 API에 접근하기 위해 특정 사용자에게 발급된 고유 키
  • 주로 공공 데이터 포털 사이트 등에서 사용자에게 제공
  • 클라이언트는 이 키를 API 요청에 포함하여 인증을 수행

발급과 요청

  • 사용자는 api key를 발급 (예 공공데이터포털사이트)
  • api를 요청할때 key와 함께 서버로 요청
  • 서버는 key를 검증 user정보확인, 권한을 확인
  • key인증이 완료되면 데이터를 사용자에게 반환

장점

  • 구현이 간단하고 빠른 인증 방식

문제점

  • key가 유출되었을때 대비하기 힘들다
  • key를 업데이트를 주기적으로 하기때문에 번거롭다.
  • key하나만으로 제어하기 때문에 보안취약점이 존재

Oauth2.0

  • 타 어플리케이션이 사용자의 인증정보를 간접적으로 접근할 수 있게 하는 인증 프로토콜
  • oauth를 통해 사용자는 자신의 자격증명을 제공 특정 어플리케이션에 권한을 부여하여 액세스 토큰을 발급받아 인증을 수행한다.

절차

  • 사용자는 애플리케이션에 로그인 기능을 사용하려는 요청을 보냅니다.
  • 애플리케이션은 사용자가 인증되지 않았을 경우, 인증 서버로 리다이렉션합니다.
  • 인증 서버에서 사용자의 로그인 상태와 자격을 확인한 후, Grant를 통해 사용자의 동의를 얻습니다.
  • 사용자 동의가 완료되면 애플리케이션에 인가 코드를 전달합니다.
  • 애플리케이션은 인가 코드를 Access Token으로 교환하여 리소스 서버에 접근합니다.
  • 리소스 서버는 인증 서버에 토큰 유효성을 검증하고, 유효하면 데이터를 반환합니다.

장점

  • 세션 스토리지가 필요 없다.
  • google, facebook같은 다양한 서비스가 토큰방식을 지원하여 추가확장이 용이함

문제점

  • 기존 api방식보다는 복잡하다.
  • 발행된 token의 유효성을 확인하는 과정이 필요하다, 유효기간 문제도 존재

JWT

  • json web token의 줄임말로 token작성에 대한 규약
  • 인증과 권한 부여를 위해 사용되는 JSON기반 토큰
  • 토큰 자체에 사용자 인증정보, 유효성 확인을 위한 서명이 포함
  • 클라이언트가 별도 인증서버에 요청하지 않고도 토큰을 검증 가능

절차

  • 사용자가 로그인하면, 서버는 인증 정보를 바탕으로 JWT를 발행합니다.
  • 클라이언트는 JWT를 API 요청 헤더에 포함하여 서버에 보냅니다.
  • 서버는 JWT의 유효성을 검증한 후, 요청된 리소스를 반환합니다.

장점

  • 별도의 인증서버를 통해 인증여부를 확인하지 않고, JWT내에서 직접 인증 정보를 확인가능
  • 세션을 유지하지 않아도 인증이 가능하다.

문제점

  • 토큰은 정보확인이 가능하므로 최소한의 정보만 포함해야한다.
  • 민감한 정보는 인증서버에 다시 접속해야 하는 과정이 필요
  • 토큰자체는 수정될 수 없어, 만료시 새로운 토큰을 발급해야 한다.