기본 인증 Basic Authentication

기본 인증 이라고 불리우는 Basic Authentication

토큰 인증이 잘 쓰이기 이전에, 여러 곳에서 많이 쓰이던 가장 쉽고 간단하게 개발하는 인증 방법 중에 하나. 이 방법이 왜 많이 쓰였을까??

이전 글에서도 말했듯이 세션 기반 인증은 여러 가지로 복잡하고 문제점을 가지고 있다. 그 중에 Cookie가 만들어진 도메인에 한정되는 방법이다 보니 제한 사항이 발생했다.
이 방법은 로그인 페이지가 필요하지 않기 때문에 기계 장치지만, 서버와 통신해야 하는 예를 들면 아래와 같은 지문 등록 기계 같은 경우에 "인증"과 "인가"를 사용하려고 한다면 이 기본인증 (Basic Authentication)을 사용하면 가장 빠르게 개발이 가능하다

기본 인증 방법은 간편하다는 장점 때문에 많은 곳에서 여전히 사용 되고 있다
사용법은 아래의 Flow 를 따른다  

Basic Authentication Flow
Authorization: Basic <credentials>

처음에 인증 없이 서버에 접근하면 401(권한없음) 코드와 함께 헤더에 WWW-Authenticate: {type} realm="인증에 대한 알림 메시지" 형태로 응답을 준다

<credentials>은 기본적으로 Base64-Encoded(A:B) 를 따른다
예를 들면 A는 UserId ,  B는 Password 를 대응 하여 Base64Encoded("jinny:lamp")를 하게 되면 값은 amlubnk6bGFtcA== 가 나오게 된다

Authorization: Basic amlubnk6bGFtcA==
기본 인증이 완성된 형태

이 형태를 Request 를 보낼 때, Header 에 키와 값을 붙여서 보내면 서버에서 해당 Header의 값을 읽어 기본 인증을 확인 한 후에 userid:password 에 맞는 값을 매칭 하여 인증을 하는 형태다

GET /api/authtest
Authorization: Basic amlubnk6bGFtcA==

200 Ok
http example

이 방법은 base64로 인코딩한다지만, base64는 디코딩이 가능하기 때문에 패스워드를 직접적으로 보내는 것에 의하여 HTTPS/TLS 가 아닐 경우 감청 당할 수 있는 보안 이슈가 있기 때문에, HTTPS/TLS 를 사용하더라도 되도록이면 사용하지 않도록 권고 되고 있다 (하지만 편리함으로 인해 많이들 사용할 듯... 외부 공개 하지 않지만 내부에서 필요한 곳들에서)

References

HTTP authentication - HTTP | MDN
HTTP provides a general framework for access control and authentication. This page is an introduction to the HTTP framework for authentication, and shows how to restrict access to your server using the HTTP “Basic” schema.
Basic access authentication - Wikipedia
rfc7617
The ‘Basic’ HTTP Authentication Scheme (RFC )