인증하는 방식들
- 인증을 확인하는 방법으로 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내에서 직접 인증 정보를 확인가능
- 세션을 유지하지 않아도 인증이 가능하다.
문제점
- 토큰은 정보확인이 가능하므로 최소한의 정보만 포함해야한다.
- 민감한 정보는 인증서버에 다시 접속해야 하는 과정이 필요
- 토큰자체는 수정될 수 없어, 만료시 새로운 토큰을 발급해야 한다.