challege-response와 preemptive

ttomy·2023년 5월 8일
0

preemptive

서버는 사용자가 인증을 필요로 한다는 사실을 명시하기 위해 challenge-respones mechanism을 사용할 수 있다.

  • challenge-respones mechanism란?
  1. 일단 클라이언트에서 인증 정보(Authorization 헤더)가 없는 요청을 보냅니다.
  2. 서버에서는 인증되지 않은 클라이언트의 요청이 왔음을 파악하고,
    서버에서 읽을 수 있는 인증 방식을 WWW-Authenticate 헤더에 담은 후(이 정보를 challenge라고 부름) 401 상태코드와 함께 응답합니다.
  3. 클라이언트는 401 응답을 받은 후 똑같은 요청을 다시 보내는데, 이번엔 Authorization 헤더에 인증 정보를 담은 후 요청을 보냅니다.
  4. 서버에서는 해당 요청의 인증 정보를 분석해서 인증을 시도합니다.

클라이언트는 2에서 기본적으로는 서버로부터 challenge를 받을 때까지 기다린다.
preemptive() 메서드를 사용하면 이를 생략하고 첫 요청부터
authoriztion헤더를 담아 보낸다.

이런 challenge -respinse 과정이 왜 필요한 걸까?
첫 통신에서 서버가 클라이언트에게 난수 값을 WWW-Authenticate에 담아 응답하는 모양이다.

그냥 첫 요청부터 받아서 본인이 인증하지 않는 방식이면 BAD_REQUEST응답 같은 걸 보내면 안되나?
그래서 알아보았다.

서버가 본인이 통신하기를 원하는 클라이언트가 맞는지 확인하기 위해서인 듯 하다. 서로 같은 private key를 알고 있는지를 검사하는 과정이다.
클라이언트가 sign한 값을 서버가 public key로 풀어 자기가 보냈던 challenge값과 동일한지 검사해 클라이언트를 인증한다.

0개의 댓글