[Spring Security] HTTP Basic Authentication

dev-log·2021년 9월 25일
0

HTTP Basic Authentication이란?

특정 resource에 대한 접근을 요청할때 브라우저가 사용자에게 username과 password를 확인해 인가를 제한하는 방법이다.

HTTP Basic Authentication : 동작 방법

  1. authenticated되지 않은 client가 접근이 제한된 GET /home request를 웹 서버에게 요청한다.

  2. server는 401 Unauthorized 에러와 함께, username과 password를 요청한다.

	www-Authenticate : Basic realm="localhost"
  1. browser는 사용자에게 username과 password를 입력받아 다시 동일한 GET /home resource를 요청한다.
	Authorization : Basic YWxpYwU6GFzc3dvcmQ==

(이때 요청 header에는 입력받은 username과 password를 BASE64로 Encode한 값을 포함한다.)

  1. 만약 입력한 username과 password가 server에 저장된 것과 일치할 경우, 200 응답코드와 함께 해당하는 resource를 response한다.

base64 encoding 순서

base64는 'username : password'를 encode 한다.

~~이름과 비밀번호를 제공한다.

dan / password (dan : username, password : password)

이름과 패스워드를 : 와 함께 결합한다.

dan:password

브라우저가 결합된 문자열을 base64로 인코딩한다.

ZGFuOnBhc3N3b3JK

인코딩된 문자열을 HTTP header 에 담아 전송한다.

Authorization : Basic ZGFuOnBhc3N3b3JK

HTTP Basic Auth의 특징

간단한 암호화 방식만을 취하기 때문에 보안에 굉장히 취약하다.

• HTTP Basic Auth는 cookies & sessions & login page 등이 필요하지 않은 굉장히 간단한 방법이다. (그래서 사용하기는 매우 간단하다.)

• 전송되는 credentials 값들은 encrypted 되지 않는다. 어떠한 encrypte & hash 등의 기술이 적용되지 않고 단지 Base64로 encode 된 값들이 전송될 뿐이다. 따라서 보안에 굉장히 취약하다.

• web server가 로그아웃 할 수 있는 방법을 제공하지 않는다.

• HTTP Basic Auth mechanisim은 당신의 app이 수행하는 것이 아닌 브라우저가 수행하는 것이다.

• 위와 같은 보안취약점을 보완하기 위해서는 HTTP Basic Auth는 반드시 HTTPS와 같이 사용해야 한다. HTTPS를 사용하면 전송되는 데이터가 노출되지 않는다.

HTTP Basic Auth는 매우 간단한 매커니즘이다. 따라서 SSL과 함께 사용한다고 해도 반드시 민감하지 않은 source를 다룰 때만 사용해야 한다.

Reference

https://youtu.be/fjkxqmRlA9E
https://minholee93.tistory.com/entry/Spring-Security-HTTP-Basic-Authentication?category=924032

profile
배운 걸 기록하는 곳입니다.

0개의 댓글