EtoC

인증과 인가 본문

CS/기초공부

인증과 인가

게리드 2023. 8. 2. 00:16

1. 인증(Authentication)

1. 인증이란?

인증은 사용자가 누구인지를 결정하는 과정으로, 사용자의 자격을 증명하는 정보가 데이터 인증서버의 자격증명정보와 일치하는지 확인하고, 그 인증절차를 통과하는 사용자에게 시스템에대한 접근권한을 주는것을 말한다.

2. 인증의 유형

1) SFA 인증

SFA(단일요소인증)은 자격증명 정보로서 사용자 ID와 암호만을 요구하는 방식이다.
SFA는 ID와 비밀번호만 알아도 쉽게 보안에 문제가 발생한다.

2) 2FA 인증

로그인 요청시 모바일 기기를 통해 사용자에게 고유코드를 부여하거나 지문인식같은 추가적인 인증 요소를 요구해 SFA인증 보다 인증을 강화한 방식이다.

3) MFA 인증

사용자의 ID, 비밀번호, 생체인증에 더해 사용자가 직접 답변해야하는 질문을 추가하여 3가지 이상의 신원을 확인 방법을 인증에 사용하는 방식으로 2FA보다 조금 더 보안을 강화한 방식이다.

3. 인증 시스템

인증시스템에는 서버기반의 인증시스템과 토큰기반의 인증 시스템이있다.

1. 서버기반 인증 시스템

예전에는 서버에서 유저의 정보를 기억하고 인증하였는데 이를 서버기반의 인증시스템이라한다.
이렇게 데이터를 저장할 경우 서버에 과부하가 걸리기쉽고, 서버를 분할하거나 확장하기 어렵다. 또한 여러 도메인에서 관리하기 어렵다는 단점이있다.
이러한 단점을 해결하기 위해 토큰기반의 인증시스템이 도입되기 시작했다.

2. 토큰기반 인증 시스템

유명한 토큰 기반인증 시스템으로는 JWT(Json Web Token)이 있다.
토큰 기반 인증의 특징으로는 무상태성과 확장성이 있다.

1) statelsess Server

stateless 서버는 어떠한 상태 정보도 저장하지 않고, 서버는 클라이언트의 요청만으로 작업을 처리하며 세션을 사용하지 않기 때문에 세션없는 서버라고도 한다.
서버는 요청이오면 응답을 보내는 단순한 역할만을 하고 세션에대한 관리는 클라이언트쪽이한다.

이런 특징은 서버를 단순하게 구현할 수 있고, 세션의 상태를 유지할 필요가 없기때문에 확장성에 좋다.
토큰을 사용하면 클라이언트와 서버의 연결고리 없이 서버를 확장하기에 매우 적합한 환경을 제공한다.

✏️ stateful server?

stateful 서버는 클라이언트의 상태나 세션 정보를 가지고 상호작용하는 서버로 세션기반 서버라고도 한다.
서버는 요청을 받을시 메모리를 할당하여 진행중인 세션에 관련된 정보나 유저정보세션변수같은 정보들을 저장하고 사용자에게 맞는 응답을 제공할 수 있다.
하지만 각 클라이언트의 세션 상태 정보를 관리하고 유지해야 하므로 메모리 사용 및 확장성 문제가 발생한다.

2) 확장성(Extensibility)

서버의 확장성 뿐만 아니라, 토큰에 권한을 선택적으로 주면 로그인정보를 더 넓고 다양하게 사용할 수 있다.

4. 인증 절차

1. 회원가입시

서비스의 가입 절차를 진행한 사용자의 아이디와 비밀번호를 데이터 베이스에 저장한다.
이때 사용자의 아이디와 비밀번호를 입력한 문자 그대로 저장하면 안되고, 반드시 사용자의 비밀번호는 암호화한 후 저장해야한다.

2. 로그인시

사용자가 회원 가입 때 입력한 본인의 아이디와 비밀번호를 입력하는데, 입력된 비밀번호를 암호화한 후에 그 값을 DB에 암호화되어 저장된 비밀번호와 비교하여 일치할 경우 로그인할 수 있게한다.
로그인에 성공하면 백엔드 API 서버는 사용자의 인증 정보가 담긴 access token을 사용자에게 전송하고, 사용자는 로그인 성공 후,

다음 요청부터는 서버에서 받은 access token을 요청에 첨부하여 서버로 전송함으로써 매번 로그인을 하지 않아도 된다.

2. 인가(Authorization)란?

인가는 사용자에게 특정 리소스 또는 기능에 대한 액세스 권한을 부여하는 프로세스로, 종종 액세스 제어 또는 클라이언트 권한과 같은 의미로 사용된다.
인증(Authentication) 과정 이후에 수행되며, 사용자의 신원을 확인하거나 사용자가 제공한 자격을 검증하여 신원을 확인한다.

신원이 확인되면 사용자는 해당 작업을 수행할 수 있는 권한을 얻게된다.
일반적으로 인가는 액세스 제어 목록(ACL, Access Control List), 역할 기반 접근 제어(RBAC, Role-Based Access Control), 토큰 기반 인가(Token-Based Authorization) 등의 메커니즘을 사용하여 구현된다.