테크레시피

대표적인 웹사이트 인증 방식 6가지는?

사용자에게 다른 데이터를 제공하기 위해 로그인 기능을 탑재한 웹사이트는 다수 존재한다. 하지만 사용자 측은 웹사이트에 탑재된 로그인 기능 인증 방식까지 신경쓸 필요는 없다. 이런 웹사이트 인증 방식에는 대표적인 6가지 방법이 있다.

첫 번째 기본 인증. HTTP에 내장된 기본 인증은 가장 기본적인 인증 방식이다. 기본 인증은 암호화 기능은 없고 베이스64(Base64)로 인코딩한 사용자 아이디와 암호를 클라이언트에서 서버로 전송한다. 인증 흐름은 먼저 클라이언트는 서버에 인증되지 않은 요청을 보내고 서버는 401 에러를 응답한다. 이후 클라이언트는 사용자 아이디와 암호를 전송하면 서버에 액세스할 수 있다.

기본 인증의 장점은 구현이 용이하다는 점과 많은 브라우저가 대응하고 있다는 점 등을 들 수 있다. 반대로 암호화를 대응하지 않아 요청마다 매번 인증할 필요가 있다는 건 단점이다.

다음은 다이제스트(Digest) 인증. 다이제스트 인증은 기본 인증과 마찬가지로 HTTP에 포함되어 있지만 암호를 MD5로 해시하는 기본 인증보다 보안을 강화할 수 있다. 인증 절차는 기본 인증과 거의 같지만 MD5에 의한 암호 해시를 이용하는 서버와 클라이언트가 주고 받는다는 점이 다르다.

다이제스트 인증은 기본 인증 장점 외에 MD5 해시된 보안 향상이 장점이다. 하지만 요청에 따라 인증을 해야 하는 점은 기본 인증과 변함 없고 서버 측 사용자 아이디와 암호는 일반 텍스트로 저장되어 있기 때문에 서버 측 보안은 기본 인증보다 떨어진다. 또 중간자 공격에 취약하다.

다음은 세션 기반 인증. 세션 기반 인증은 쿠키를 이용해 수행하는 인증 방법으로 기본 인증과 다이제스트 인증처럼 요청마다 사용자 아이디와 암호를 송수신할 필요가 없다. 인증 절차로는 먼저 클라이언트에서 서버에 인증 정보를 전송하고 서버 측에서 성공적으로 인증되면 서버 측에서 세션을 생성, 서버는 클라이언트 세션에 쿠키를 전송하고 클라이언트는 쿠키와 함께 초대하는 서버에 액세스할 수 있다.

세션 기반 인증의 장점은 요청마다 인증 정보를 전달할 필요가 없기 때문에 로그인한 다음 처리가 빠르다는 점이다. 또 다양한 프레임워크가 존재하기 때문에 구현이 쉽다는 것도 장점이다. 단점은 서버 측에서 인증 정보를 유지한 채여서 인증 필요 없이 쿠키를 요청마다 보낼 필요가 있다는 점이다. 사이트간 요청 위주에 약점이 있다는 것이다.

다음은 토큰 기반 인증. 토큰 기반 인증은 세션 기반 인증에 이용한 쿠키 대신 토큰을 이용한다. 토큰은 서버 비밀키로 서명되어 있으며 클라이언트는 서버에서 받은 토큰과 함께 요청을 제출하는 인증 절차가 있다. 서버는 서명이 올바른지 확인하기 위한 인증 정보를 서버 측에서 보존할 필요가 없다.

토큰 기반 인증은 서버 측에서 인증 정보를 유지하되 무국적 인증 방식이기 때문에 고속 통신을 제공할 수 있으며 마이크로 서비스와도 궁합이 좋다. 반면 단점은 클라이언트 정보 유지 방법에 따라 크로스 사이트 스크립팅과 사이트간 요청 위조 피해를 받을 가능성이 있다는 것이다. 토큰은 유효기간이 지날 때마다 제거할 수 없기 때문에 만일 토큰이 유출된 경우 공격자가 악용할 수 있다는 점도 있다.

다음은 일회용 암호. 로그인을 할 때 한 번만 사용할 수 있는 비밀번호를 발급하는 것이다. 일회용 암호는 이메일 주소나 전화번호 등 확실히 계정 소유자만 사용할 수 있는 신뢰할 수 있는 시스템을 이용해 보안 레이어를 하나 추가할 수 있는 게 특징이다. 온라인 뱅킹 등으로도 이용될 만큼 보안이 높다는 게 장점이지만 신뢰할 시스템이 고장나면 인증할 수 없게 되는 단점도 있다.

다음은 제로오스(OAuth)와 오픈아이디(OpenID). 제로오스와 오픈아이디 같은 인증 프로토콜 표준은 고객이 누구냐는 인증 기능 외에도 클라이언트에 무엇을 할 수 있는지 권한 관리 기능도 갖고 있다. 구글이나 트위터, 페이스북 등 SNS 계정을 이용한 로그인 기능을 구현하는 것도 가능하며 비밀번호를 유지하지 않고 높은 보안을 제공할 수 있다.

제로오스와 오픈아이디 인증의 장점은 높은 보안과 새로 게정을 만들 필요가 없다는 점, 암호를 보유하지 않기 때문에 제3자로부터 공격을 받아도 무해하다는 점 등을 들 수 있다. 단점으로는 다른 시스템에 의존하는 부분이 생기는 것이다. 권한 확인이 사용자 측에서 간과하기 쉬운 점, SNS 계정을 보유하지 않은 사람은 이용할 수 없는 점을 들 수 있다.

따라서 채택할 인증 방식을 결정할 때에는 몇 가지 기준이 필요하다. 서버 측 템플릿을 이용하는 응용 프로그램은 세션 기반 인증, 제로오스와 오픈아이디를 추가하면 좋다. REST API는 토큰 기반 인증을, 고급 기밀 정보를 취급할 경우에는 일회용 암호를 추가하는 식이다. 관련 내용은 이곳에서 확인할 수 있다.

추천기사