Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 프로그래머스 K_Digital Training 프론트엔드
- useEffect return
- 프로그래머스 데브코스
- KDT 프로그래머스
- KDT 프로그래머스 데브코스 프론트엔드
- 모던 javascript Deep Dive
- 리팩토링 회고
- Vue3
- 모던 자바스크립트 TIL
- 모던 자바스크립트 Deep Dive TIL
- 인프런 자바스크립트 알고리즘 문제풀이
- react 프로젝트 리팩토링
- 투포인터알고리즘 js
- Vue3 Router
- Frontend Roadmap
- 프로그래머스 K_Digital Training
- react customHook 예시
- 우테캠 회고록
- useRef 지역 변수
- 개발자 특강
- frontend roadmap study
- 머쓱이
- 프로그래머스 데브코스 프론트엔드 TIL
- 백준 node.js
- 백준 js
- 프로그래머스 데브코스 프론트엔드
- K_Digital Training
- TypeScript 문법 소개
- 모던 자바스크립트 Deep Dive
- 모던 자바스크립트 딥다이브
Archives
- Today
- Total
프론트엔드 개발자의 기록 공간
[FE_Roadmap] Authentication Strategies 본문
인증 전략
In this article
- 인증은 신원을 확인하는 프로세스입니다. 비밀번호, 하드웨어 토큰, 기타 여러 방법을 사용해야 합니다.
Basic Authentication
HTTP Basic Authentication은 웹 서비스 및 애플리케이션에서 사용자 인증을 위한 간단한 인증 메커니즘 중 하나입니다. 이 방식은 클라이언트(일반적으로 브라우저)가 서버에 대한 요청을 보낼 때 사용자 이름과 암호를 서버에 제공하여 접근 권한을 얻을 수 있도록 해줍니다.
동작 원리
- 클라이언트가 서버에 요청을 보냅니다.
- 서버는 "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 인증 원리
- 유저가 소셜 로그인 버튼을 통해 어플리케이션에 사용 요청을 보냅니다.
- 어플리케이션은 외부 서비스에 OAuth setting시에 정의한 정보들과 함께 외부 서비스에 사용자 인증을 요청합니다.
- 외부 서비스는 사용자에게 인증을 요청하고, 사용자가 동의하면 어플리케이션에게 인증 코드를 전달합니다.
- 어플리케이션은 인증 코드와 OAuth setting시에 정의한 정보들을 통해 외부 서비스에 사용자 인증을 요청하고, 외부 서비스는 어플리케이션에게 액세스 토큰을 전달합니다.
- 어플리케이션은 전달받은 액세스 토큰을 이용하여 외부 서비스에 대한 정보나 자원들을 이용할 수 있습니다.
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