티스토리 뷰
rabbitMQ http api를 통해서 rabbitmq의 큐 정보를 읽어오는 것을 개발하면서 Basic 인증 방식으로 rabbitmq http api 인증을 했는데 가끔 보이는 Bearer는 무엇이고 Basic이랑 무엇이 다른지, 그리고 다른 것은 없는지 궁금해져서 찾게 되었다.
HTTP 인증
우선 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
Bearer
JWT 또는 OAuth 토큰으로 인증하는 방식이다.
헤더에 JWT 또는 OAuth를 수행해서 발급 받은 토근을 보내도록 되어 있으며 토큰을 이용하는지라 토큰에 유효시간 및 refresh 설정을 해서 토큰이 노출되었을 때의 대처를 할 수 있다.
https://datatracker.ietf.org/doc/html/rfc6750
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
HOBA
HTTP Origin-Bound Authentication의 약어로 html에 포함된 javascript 기반 인증에서도 사용될 수 있는 인증 방식이다.
클라이언트와 서버가 서로 상호작용하며 비대칭키로 전자서명해 인증을 수행하는 인증 방식이다.
https://datatracker.ietf.org/doc/html/rfc7486
Mutual
클라이언트와 서버간의 암호 기반 인증 방식이다.
서버와 클라이언트 모두 인증을 하는 상호 인증 방식으로 서로 인증서를 교환, 검증 하는 인증 방식이다.
인증서 교환은 TLS 프로토콜을 통해 수행된다.
https://datatracker.ietf.org/doc/html/draft-ietf-httpauth-mutual-11
AWS4-HMAC-SHA256
AWS 전자 서명 기반 인증 방식이다.
https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-auth-using-authorization-header.html
✋ HTTP 인증
https://developer.mozilla.org/ko/docs/Web/HTTP/Authentication
✋ www-authenticate
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/WWW-Authenticate
✋ HTTP Origin-Bound Authentication (HOBA)
https://tools.ietf.org/id/draft-ietf-httpauth-hoba-00.html#rfc.section.2
✋ What is digest authentication?
https://stackoverflow.com/questions/2384230/what-is-digest-authentication/2384280
'보안' 카테고리의 다른 글
CI(Connection Information), DI(Duplication Information) 란? (1) | 2021.09.11 |
---|---|
[개인정보보호법] 기록 보존법 1탄 (0) | 2021.08.30 |
- Total
- Today
- Yesterday
- DATABASE
- cache
- rabbitmq
- 공간데이터
- MAC
- 어노테이션
- springboot
- DB
- 역직렬화
- 데이터베이스
- JPA
- postgres
- Spring
- HttpClient
- 이클립스
- mockito
- 자바
- Java
- ssh
- annotation
- k8s
- 캐시
- Caching
- eclipse
- 캐싱
- PostgreSQL
- 스프링부트
- enum
- 메시지큐
- Intellij
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |