![article thumbnail image](https://blog.kakaocdn.net/dn/Q0iDE/btsezsIwcrk/yd6MHQn9px1chyqIxJZjZk/img.jpg)
먼저 인증과 인가의 개념을 이해해봅시다.
인증(Authentication)은 사용자가 누구인지 확인하는 과정입니다.
로그인 과정에서 이메일 주소와 비밀번호를 통해 사용자를 확인하는 것이 인증입니다.
인가(Authorization)는 인증된 사용자에게 특정 리소스에 대한 접근 권한을 부여하는 과정입니다.
예를 들어, 웹 페이지에 대한 읽기, 쓰기, 수정, 삭제 권한을 관리하는 것입니다.
인증 및 인가는 로그인 및 회원 가입 외에도 사용자의 권한을 관리하는 데 사용됩니다.
예를 들어, 웹사이트에서 관리자와 일반 사용자의 권한을 구분하여 관리하는 것도 인증 및 인가의 영역입니다.
Auth0과 OAuth 2.0 소개
Auth0은 인증 및 인가를 손쉽게 구현할 수 있는 서비스(라이브러리 개념)이며,
그 안에는 다양한 인증 프로토콜이 포함되어 있습니다.
Auth0의 핵심 기능으로는 아래 기능들이 있습니다.
- 소셜 로그인 지원
- 엔터프라이즈 로그인 연동
- 싱글 사인온 (SSO)
- 멀티팩터 인증 (MFA)
- 사용자 관리
OAuth 2.0은 인터넷 사용자들이 계정 정보를 공유할 때,
암호를 공유하지 않고 JWT토큰을 통해 안전하게 인증 정보를 교환할 수 있는 인증 프로토콜입니다.
Auth0에서 OAuth 2.0을 지원하므로, 이 프로토콜을 사용하여 인증 및 인가 기능을 구현할 수 있습니다.
그럼 Auth0에서는 JWT 토큰을 사용할 수 없을까요?
아닙니다.
Auth0과 OAuth 2.0 둘 다 JSON Web Token (JWT)를 사용할 수 있지만,
사용 목적과 토큰 발급 방식에 차이점이 있습니다.
Auth0에서 JWT 토큰 사용:
Auth0에서 발급되는 JWT 토큰은 주로 인증 및 인가 목적으로 사용됩니다.
이 토큰은 클라이언트와 서버 간에 안전하게 정보를 전달하며, 서버는 토큰에 포함된 정보를 기반으로 사용자의 인증 상태를 확인할 수 있습니다. Auth0은 다양한 인증 프로토콜을 지원하며, 이 중 일부 프로토콜에서 JWT 토큰을 사용합니다.
OAuth 2.0에서 JWT 토큰 사용:
OAuth 2.0에서 JWT 토큰을 사용할때는 액세스 토큰을 일반적으로 사용하며, 사용자의 인증 상태와 제 3자 애플리케이션에 대한 접근 권한을 나타냅니다. OAuth 2.0 토큰 발급 과정에서 클라이언트는 인증 서버에게 사용자 인증을 요청하고,
인증 서버는 사용자의 인증 정보를 검증한 후 JWT 형식의 액세스 토큰을 발급합니다.
이 토큰은 클라이언트가 리소스 서버에 접근할 때 사용되며, 리소스 서버는 토큰을 기반으로 클라이언트에게
접근 권한을 부여합니다.
즉, 둘 다 JWT 토큰을 사용하지만, Auth0은 주로 사용자 인증 및 인가를 위해 사용되고, OAuth 2.0에서는 제 3자 애플리케이션에 대한 접근 권한 부여를 위해 사용됩니다.
제 3자 애플리케이션에 대한 접근 권한이라는게 헷갈릴수도있어 예를들어보면,
사용자가 소셜 미디어 플랫폼에서 사진을 저장하고 있는데,
이 사진들을 다른 사진 편집 애플리케이션에서 사용하고자 할 때,
OAuth 2.0을 사용하여 사용자가 사진 편집 애플리케이션에게 사진을 읽고 쓰기 위한 권한을 부여할 수 있습니다.
이 과정에서 사용자는 자신의 아이디와 비밀번호를 사진 편집 애플리케이션에 직접 전달하지 않고,
대신 OAuth 2.0 인증 프로세스를 통해 안전하게 권한을 부여하게 됩니다.
이렇게 하면 사용자는 자신의 데이터에 대한 제어력을 유지하면서
제 3자 애플리케이션에 대한 접근 권한을 편리하게 관리할 수 있습니다.
결론적으로, Auth0은 여러 인증 프로토콜을 지원하는 도구이며, OAuth 2.0은 그 중 하나의 인증 프로토콜입니다.
Auth0을 사용하면 개발자들은 OAuth 2.0과 같은 인증 프로토콜을 사용하여
인증 및 인가 기능을 손쉽게 구현할 수 있습니다. 이를 통해 개발자들은 프로젝트에 필요한 인증 및 인가 기능을
빠르게 구현하고, 보안에 대한 걱정을 줄일 수 있습니다.
'개발이야기 > TIL' 카테고리의 다른 글
[Design Pattern] React와 Flux 패턴 (1) | 2022.09.30 |
---|---|
[Design Pattern] MVC (1) | 2022.09.30 |
[CS] 컴파일러와 인터프리터 차이점 (0) | 2022.09.28 |
[JS] 여러 input 에 한번에 붙여넣기 (0) | 2022.09.22 |
크기만 작아지면 반응형 웹 일까? (0) | 2022.08.05 |