서버는 사용자가 인증을 필요로 한다는 사실을 명시하기 위해 challenge-respones mechanism을 사용할 수 있다.
클라이언트는 2에서 기본적으로는 서버로부터 challenge를 받을 때까지 기다린다.
preemptive() 메서드를 사용하면 이를 생략하고 첫 요청부터
authoriztion헤더를 담아 보낸다.
이런 challenge -respinse 과정이 왜 필요한 걸까?
첫 통신에서 서버가 클라이언트에게 난수 값을 WWW-Authenticate에 담아 응답하는 모양이다.
그냥 첫 요청부터 받아서 본인이 인증하지 않는 방식이면 BAD_REQUEST응답 같은 걸 보내면 안되나?
그래서 알아보았다.
서버가 본인이 통신하기를 원하는 클라이언트가 맞는지 확인하기 위해서인 듯 하다. 서로 같은 private key를 알고 있는지를 검사하는 과정이다.
클라이언트가 sign한 값을 서버가 public key로 풀어 자기가 보냈던 challenge값과 동일한지 검사해 클라이언트를 인증한다.