프론트엔드 개발자의 기록 공간

[FE_Roadmap] Authentication Strategies 본문

개발지식

[FE_Roadmap] Authentication Strategies

[리우] 2024. 3. 31. 19:03

인증 전략

In this article

  1. Basic Authentication
  2. Session Based Authentication
  3. JWT Authentication
  4. OAuth
  • 인증은 신원을 확인하는 프로세스입니다. 비밀번호, 하드웨어 토큰, 기타 여러 방법을 사용해야 합니다.

Basic Authentication

HTTP Basic Authentication은 웹 서비스 및 애플리케이션에서 사용자 인증을 위한 간단한 인증 메커니즘 중 하나입니다. 이 방식은 클라이언트(일반적으로 브라우저)가 서버에 대한 요청을 보낼 때 사용자 이름과 암호를 서버에 제공하여 접근 권한을 얻을 수 있도록 해줍니다.

동작 원리

  1. 클라이언트가 서버에 요청을 보냅니다.
  2. 서버는 "WWW-Authenticate" 헤더를 사용하여 클라이언트에게 인증을 요청합니다. 이 헤더에는 "Basic" 및 사용자 인증을 위한 "realm"이 포함됩니다. "realm"은 사용자에게 어떤 영역 또는 서비스에 대한 인증이 필요한지 설명하는 텍스트입니다.
Status-Code: 401 Unauthorized
Www-Authenticate: Basic realm="Page"

  

   3.  클라이언트는 "Authorization" 헤더에 사용자 이름과 암호를 Base64로 인코딩하여 서버에 제공합니다.

Authorization: Basic "base64로 인코딩된 값"

  

   4. 서버는 사용자 이름과 암호를 검증합니다.

패스워드 전송후 응답값을 보면 Base64로 인코딩된 것을 볼 수 있습니다.

decode를 하게되면 평문의 비밀번호를 바로 추출할 수 있습니다.

 

HTTP Basic Authentication은 간단하고 쉽게 구현할 수 있지만, 보안이 낮고 패스워드가 평문으로 전송되므로 중요한 정보에 사용하는 것은 권장되지 않습니다. 더 강력한 인증 및 보안 방법을 사용하는 것이 좋습니다.

Session Based Authentication

  • 세션 인증은 웹 애플리케이션에서 사용자를 인증하고 상태를 유지하는 매커니즘 중 하나입니다.
  • 세션 기반 인증은 인증 정보의 세션을 서버가 저장해야 하므로 트래픽이 몰릴 경우 서버가 다운될 수 있습니다. 또한 여러대의 서버를 운영하는 경우 세션을 공유해야 하므로 서버의 확장성이 떨어집니다.
  • 데이터베이스에 저장하는 방법도 있지만, 데이터베이스에 저장하면 데이터베이스에 부하가 걸리게 됩니다.

JWT Authentication

  • JWT는 정보를 JSON 객체로 표현하고, 이 정보를 안전하게 서명하여 웹 응용 프로그램에서 사용자 인증 및 권한 부여, 데이터 교환을 위한 강력한 메커니즘을 제공합니다.
  • JWT는 세션 기반 인증과 달리 서버에 세션을 저장할 필요가 없으므로 서버의 확장성이 높아집니다. 또한, 서버의 부하가 줄어드는 장점이 있습니다.

  • JWT는 세 부분으로 구성됩니다.
    • Header: JWT의 유형과 사용하는 암호화 알고리즘을 정의하는 JSON 객체입니다.
    • Payload: 클레임 정보(사용자, 권한, 메타데이터 등 다양한 목적의 정보)가 포함된 JSON 객체입니다.
  • Signature: 서버에서 생성된 서명 부분으로, JWT의 무결성을 검증하는 데 사용됩니다. (서버의 비밀키로 서명)
  • 일부 데이터를 JWT 토큰에 저장하여 api요청없이 자신의 정보를 이용할 수 있습니다.
  • JWT는 세션 기반 인증과 달리 서버에 세션을 저장할 필요가 없으므로 서버의 확장성이 높아집니다.

OAuth

  • OAuth(Open Authorization)는 웹 및 모바일 애플리케이션에서 다른 애플리케이션 또는 서비스에 대한 제한된 액세스 권한을 부여하기 위한 개방형 표준 인증 프로토콜입니다.
  • 다른 애플리케이션의 계정 정보를 직접 받아서 이용하기에는 보안상의 문제가 있습니다. 이를 해결하기 위해 OAuth를 사용합니다.
  • OAuth2 프로토콜에서는 권한 부여 방식에 따른 프로토콜을 4가지 종류로 구분하여 제공하고 있습니다.
    • Authorization Code Grant : 권한 부여 승인 코드 방식
    • Implicit Grant : 암묵적 승인 방식
    • Resource Owner Password Credentials Grant : 자원 소유자 자격증명 승인 방식
    • Client Credentials Grant : 클라이언트 자격증명 승인 방식

사용 예시

  • 소셜 미디어 로그인 : (Facebook, Google)을 로그인하는 경우, OAuth 사용하여 인증 및 권한을 부여합니다.

  • API 액세스: 클라이언트 애플리케이션이 외부 서비스 또는 API에 액세스할 때, OAuth를 사용하여 사용자의 데이터 또는 기능에 대한 권한을 관리하고 제어합니다.
  • 싱글 사인온(SSO): 여러 서비스 또는 애플리케이션 간에 사용자가 단일 인증을 통해 로그인하고 사용자의 신원을 공유하는 경우 OAuth를 사용하여 SSO를 구현할 수 있습니다.

Authorization Code Grant 인증 원리

 

  1. 유저가 소셜 로그인 버튼을 통해 어플리케이션에 사용 요청을 보냅니다.
  2. 어플리케이션은 외부 서비스에 OAuth setting시에 정의한 정보들과 함께 외부 서비스에 사용자 인증을 요청합니다.
  3. 외부 서비스는 사용자에게 인증을 요청하고, 사용자가 동의하면 어플리케이션에게 인증 코드를 전달합니다.
  4. 어플리케이션은 인증 코드와 OAuth setting시에 정의한 정보들을 통해 외부 서비스에 사용자 인증을 요청하고, 외부 서비스는 어플리케이션에게 액세스 토큰을 전달합니다.
  5. 어플리케이션은 전달받은 액세스 토큰을 이용하여 외부 서비스에 대한 정보나 자원들을 이용할 수 있습니다.
728x90

'개발지식' 카테고리의 다른 글

[FE_Roadmap] writing css & testing your apps  (0) 2024.03.02
[FE_Roadmap] Pick a Framework  (1) 2024.02.18
[FE_Roadmap] Module Bundlers  (0) 2024.02.13
[FE_Roadmap] CSS Architecture&CSS Preprocessors  (1) 2023.12.17
[FE_Roadmap] Package Managers  (0) 2023.12.09
Comments