티스토리 뷰

보안

HTTP 인증 종류

파미페럿 2022. 1. 5. 17:43

rabbitMQ http api를 통해서 rabbitmq의 큐 정보를 읽어오는 것을 개발하면서 Basic 인증 방식으로 rabbitmq http api 인증을 했는데 가끔 보이는 Bearer는 무엇이고 Basic이랑 무엇이 다른지, 그리고 다른 것은 없는지 궁금해져서 찾게 되었다.

 

 

HTTP 인증

출처: MDN Web Docs

우선 Basic, Bearer는 http 인증 방법 들이다. 우선 http는 W3 상에서 정보를 주고 받을 수 있는 프로토콜로 보통 HTML 문서를 주고 받는데 쓰인다고 생각하면 된다. Bacis, Bearer는 http에서 제공하는 인증 방법 중 하나로 헤더(Headers)를 통해서 인증을 하는 방식이다.

 

http 프로토콜에서 인증이 필요한 서버에 대해 인증 없이 서버에 요청 했을 시, 또는 인증 정보와 같이 요청을 했으나 인증 정보가 잘못됐을 시 과정은 위와 그림과 같다.

 

인증 필요한데 인증 정보 없이 요청했을 경우

이 경우에 서버에서는 401 Unauthorized 에러를 반환한다. 인증 정보가 없다는 뜻의 에러인데 이 에러만 반환하는 것이 아니라 서버는 헤더에 아래와 같이 어떤 어떤 방식의 인증이 필요하며 어떤 곳에서 인증을 필요로 하는 것인지에 대한 정보를 보낸다.

www-authenticate	${인증 유형} realm="${인증을 필요로 하는 곳}"

 

실제로 rabbitmq http api에 인증 없이 요청했을 때 아래와 같은 헤더 값을 받았다.

www-authenticate	Basic realm="RabbitMQ Management"

 

만일 Basic 방식으로 인증을 해야하는데 Bearer 인증 방식으로 등 인증 방법이 틀렸을 경우에도 인증했을 시에도 401 Unauthorized 에러를 반환한다. 하지만 그럴 때는 우선 Authorization 값이 있어서인지 www-authenticate 값은 반환되지 않는다.

 

인증 정보와 같이 요청했으나 인증 정보가 틀릴 경우

이 경우 서버는 403 Forbidden 에러를 반환한다. 이 때는 인증 정보 자체가 틀린 것이므로 별다른 에러를 반환하지는 않는다.

 

 

HTTP 인증 방식 종류

Bearer, Basic은 http 인증을 수행할 때의 인증 방식으로 http 인증의 기본 방식은 이름에서 볼 수 있듯이 Basic이다.

그리고 그 밖에 Digest, HOBA, Mutual, AWS4-HMAC-SHA256까지해서 총 6가지 방식이 있다.

 

Basic

http 인증의 제일 기본 방식으로 '사용자 ID:비밀번호'를 base64로 암호화한 값을 통해 인증을 수행하는 방식이다.

base64로 암호화되어 있어 충분히 복호화할 수 있어 그렇게 안전한 방식은 아니다.

따라서 HTTPS/TLS와 함꼐 사용되어야하고 보안이 중요한 곳에는 사용하지 않아야 한다.

https://datatracker.ietf.org/doc/html/rfc7617

 

rfc7617

 

datatracker.ietf.org

 

Bearer

JWT 또는 OAuth 토큰으로 인증하는 방식이다.

헤더에 JWT 또는 OAuth를 수행해서 발급 받은 토근을 보내도록 되어 있으며 토큰을 이용하는지라 토큰에 유효시간 및 refresh 설정을 해서 토큰이 노출되었을 때의 대처를 할 수 있다.

https://datatracker.ietf.org/doc/html/rfc6750

 

rfc6750

 

datatracker.ietf.org

 

Digest

패스워드를 그대로 보내는 basic이 위험해서 나온 방식이다. 서버가 난수 데이터를 클라이언트에게 보내서 클라이언트가 해시 값을 만들어 보내도록 해 별도 비밀번호 값 자체를 보낼 필요가 없게 하는 것이다.

 

1. 클라이언트가 서버에게 요청한다.

2. 서버가 401 Unauthorized 에러와 함께 난수 데이터인 nonce를 클라이언트에게 반환한다.

3. 클라이언트가 서버에게서 받은 nonce와 id realm, uri, 비밀번호를 결합해 해시 값을 만든다.

4. 클라이언트가 만든 해시 값과 id, realm 값을 서버에게 보낸다.

5. 서버는 클라이언트에게서 받은 id에 매칭되는 비밀번호를 찾아 클라이언트와 동일하게 해시 값을 만든다.

6. 서버가 서버에서 만든 해시 값과 클라이언트에게서 받은 해시 값을 비교해 일치하면 인증 성공, 일치하지 않으면 인증 실패로 판단한다.

 

https://datatracker.ietf.org/doc/html/rfc7616

 

rfc7616

 

datatracker.ietf.org

 

HOBA

HTTP Origin-Bound Authentication의 약어로 html에 포함된 javascript 기반 인증에서도 사용될 수 있는 인증 방식이다.

클라이언트와 서버가 서로 상호작용하며 비대칭키로 전자서명해 인증을 수행하는 인증 방식이다.

https://datatracker.ietf.org/doc/html/rfc7486

 

rfc7486

 

datatracker.ietf.org

 

Mutual

클라이언트와 서버간의 암호 기반 인증 방식이다.

서버와 클라이언트 모두 인증을 하는 상호 인증 방식으로 서로 인증서를 교환, 검증 하는 인증 방식이다.

인증서 교환은 TLS 프로토콜을 통해 수행된다.

https://datatracker.ietf.org/doc/html/draft-ietf-httpauth-mutual-11

 

draft-ietf-httpauth-mutual-11

 

datatracker.ietf.org

 

AWS4-HMAC-SHA256

AWS 전자 서명 기반 인증 방식이다.

https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-auth-using-authorization-header.html

 

Authenticating Requests: Using the Authorization Header (AWS Signature Version 4) - Amazon Simple Storage Service

Using the HTTP Authorization header is the most common method of providing authentication information. Except for POST requests and requests that are signed by using query parameters, all Amazon S3 operations use the Authorization request header to provide

docs.aws.amazon.com

 

 

 

 

 

✋ HTTP 인증

https://developer.mozilla.org/ko/docs/Web/HTTP/Authentication

 

HTTP 인증 - HTTP | MDN

HTTP는 액세스 제어와 인증을 위한 프레임워크를 제공합니다. 가장 일반적인 인증 방식은 "Basic" 인증 방식입니다. 이 페이지에서는 일반적인 HTTP 인증 프레임워크를 소개하고 서버에 HTTP의 Basic

developer.mozilla.org

 

✋ www-authenticate

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/WWW-Authenticate

 

WWW-Authenticate - HTTP | MDN

The HTTP WWW-Authenticate response header defines the HTTP authentication methods ("challenges") that might be used to gain access to a specific resource.

developer.mozilla.org

 

✋ HTTP Origin-Bound Authentication (HOBA)

https://tools.ietf.org/id/draft-ietf-httpauth-hoba-00.html#rfc.section.2

 

HTTP Origin-Bound Authentication (HOBA)

HOBA-TBS = nonce alg origin realm kid challenge nonce = unreserved alg = 1*2DIGIT origin = scheme authority port realm = unreserved kid = unreserved challenge = unreserved Figure 1: To-be-signed data for HOBA The fields above contain the following: nonce:

tools.ietf.org

 

✋ What is digest authentication?

https://stackoverflow.com/questions/2384230/what-is-digest-authentication/2384280

 

What is digest authentication?

How does Digest Authentication differ from Basic Authentication other than sending credentials as plain text?

stackoverflow.com

 

 

 

 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함