인증이란?

bp.chys·2020년 4월 23일
0

Network

목록 보기
8/11

인증이란?

인증이란 서버에 액세스하고 있는 사람이 누군지 확인하는 것이다.
HTTP/1.1 에서는 BASIC 인증, DIGEST 인증, SSL 클라이언트 인증, 폼 베이스 인증 등을 사용한다.

BASIC 인증

기본적인 인증방식으로 클라이언트가 리퀘스트를 보내면, 서버는 상태코드 401로 응답해서 인증이 필요하다는 것을 전달한다.
그러면 클라이언트는 유저ID와 패스워드를 Base64 형식으로 인코드한 것을 송신하고 서버는 이를 확인하여 인증 성공시 200을 실패시 다시 상태코드 401로 응답하는 과정으로 인증 절차를 진행한다.

Base64라는 인코딩 방식은 암호화가 아니기 때문에 누구나 복호화할 수 있고 이는 유저 정보의 노출위험이 존재하게 된다.
따라서 BASIC 인증 방식은 많이 쓰이지 않고 있다.

DIGEST 인증

클라이언트가 리퀘스트를 송신하면, 서버는 상태코느 401과 함께 패스워드 그리고 챌린지 코드를 송신한다.
클라이언트는 패스워드와 챌린지 코드에서 리스폰스 코드를 계산해서 다시 송신한다. 서버는 이를 확인하여 인증 성공시 200을 실패시 다시 상태코드 401로 응답하는 과정으로 인증 절차를 진행한다.

BASIC 인증과 같이 패스워드를 있는 그대로 직접 보내는 일은 없기 때문에 좀 더 낫다고 볼 수는 있지만 HTTPS의 클라이언트 인증 등과 비교하면 보안 등급이 낮기 때문에 많이 사용되지는 않고 있다.

SSL 클라이언트 인증

클라이언트 증명서를 활용하여 사전에 등록된 클라이언트의 액세스인지 여부를 확인할 수 있다.
서버는 클라이언트 증명서를 검증하여 검증 결과가 정확하다면 클라이언트의 공개키를 취득하고 그 이후에 HTTPS에 의한 암호를 개시한다.

SSL 클라이언트 인증은 2-factor 인증에서 사용되는데 2-factor 인증이란 패스워드 한 개 요소만이 아닌 이용자가 가진 다른 정보를 병용해서 인증하는 방법을 말한다.

SSL 클라이언트 인증은 증명서를 발급하고 안전하게 운용하기 위해서 상당한 비용이 발생한다는 것이 특징이다.

폼 베이스 인증

HTTP 프로토콜로서 사양이 정의되어 있는 인증 방식은 아니지만 클라이언트가 서버 상의 웹 애플리케이션에 자격 정보를 송신하여 그 자격 정보의 검증 결과에 따라 인증을 하는 방식이다.

보통은 ID와 패스워드만 가지고 서버에 송신하고 검증 결과를 토대로 검증 성공 여부를 결정한다.

인증의 대부분은 폼 베이스

지금 까지 살펴본 인증 방식은 모두 단점이 뚜렷이 존재했었다. 따라서 웹 애플리케이션에서 제각각 구현하는 폼 베이스 인증을 채용하는 수 밖에 없다.

세션 관리와 쿠키에 의한 구현

HTTP는 무상태 프로토콜이기 때문에 방금 전에 인증을 성공했던 유저라는 상태를 프로토콜 레벨에서는 유지할 수 없다. 그래서 세션관리와 쿠키를 사용해서 HTTP에 없는 상태 관리 기능을 보충한다.

1) POST 메소드를 사용하여 엔티티 바디에 로그인 정보를 저장하고 HTTPS 통신을 이용하여 서버로 요청을 보낸다.

2) 서버측은 유저를 식별하기 위해 세션 ID를 발급한다. 유저의 인증상태를 세션 ID와 연관지어 서버 측에 기록한다. 클라이언트 측에 송신할 때는 Set-Cookie 헤더 필드에 세션 ID를 저장해서 리스폰스를 반환한다.

3) 서버 측에서 받은 세션 ID를 클라이언트는 쿠키로 저장해 둔다. 다음 번에 서버에 리퀘스트를 송신할 때에는 브라우저가 자동으로 쿠키를 함께 송출한다.

profile
하루에 한걸음씩, 꾸준히

0개의 댓글