JWT API 설정 및 검증 프로세스 이해

존스노우·2023년 9월 5일
0

springSecurity

목록 보기
48/75

  • 이 빈을 만들어야 빈안에 스프링 시큐리티에서 인증 인가처리할 수있는 필터들이 생성되고
  • 체인형식으로 만들어져서 요청을 처리함 .

  • 각각의 설정 클래스들이 초기화 됨.
  • jwt 인증객체로 컨버터 하는 객체
  • 인증하지 되지 못한 처리를 엔트리 포인트의 역할
  • filter -> client 요청을 가로체서 토큰을 검증하도록 수행하는 필터
  • Provider에서 2개의 속성을 가지고 검증을 한다 JwtDecoder 검증 핵심 역할

  • 위 설정대로 했을대 흐름

  • 위 설정에 의해로 jwtDecoder 생성 (검증 때문에) -> 검증 성공시 -> 인증 이 모든 과정이 설정에 의해 자동적으로 리소스 서버가 하게 된다.

  • issuer 발행자의 위치 엔드포인트를 통해 인가서버에 메타 데이터를 가져올수있음(여러개의 엔드포인트를 통해 여러 정보들을)

  • 만약 jwt-set-url을 설정하면 바로 위 과정 없이 검증 진행

  • 공개키를 질의하면 공개키를 가져와 검증

  • 1번째 검증으 통과하면 발행자 위치를 통해 발행자가 Jwt 토큰을 발행하면 여러 종류의 키와값으로 된 클레임들이 있다

  • 이런 클레임 일부는 이 클레임이 정해진 기준에 부합하는 지를 체크를 한다 클레임에 대해 체크에 부합하지않으면 검증에 실패

  • 토큰을 헤더에 담아고 그전에 인가서버 로부터 클라이언트는 권한부여 요청 (프라이빗키로 서명된 토큰 발급)

  • 리소스 서버에 요청(헤더에 토큰값 설정)

  • 공개키를 가져와서 서명된 토큰 검증 (레스트 템플릿으로 jwkSet정보요청) -> jwk -> 제이슨 웹키 여러개가 있다는 뜻에 set

  • 검증 하고 인증 성공하면 데이터로 응답

코드

  • 그림처럼 코드 설정하고

  • 설정

  • 토큰 발급.

  • 포스트맨에 설정하고 샌드 초기화 과정을 알아 보자

  • jwt보고 있고?

  • 초기화 과정

  • AuthenticationProvider -> 인증 처리를 하고 있다.

  • null 상태이고,

  • 설정때문에 이미 jwt디코더는 만들어 졌음
  • 그래서 빈으로 가져오고

  • 님부스 어쩌고 디코더 가져오고
  • jwt 인증 프로바이더가 인증을 위해서 사용 되고 있다.
  • jwt객체 컨버터

  • jwt로 인증객체를 만듬

  • berer 스펙에 사양이 부합한지 보고 디폴트로 만들어 버리넹.

  • 해당클래스 역할은 베어러 타입이 맞는지? 여러가지 검증을 한다.

  • 이제 필터를 만든다.
  • 실제 클라이언트 요청에 대해 검증을 수행할 수 있도록 요청을 가로체서 진행 할수 있는 필터

  • 토큰 요청 가로채기

  • 필터가 매니저에게 인증 처리를 맡기고

  • 검증을 최종 성공하면 jwt반환

  • 디코딩하면서 토큰에 대한 검증이 이루어 짐.

  • parse해서 검증

  • 검증을 위한 키를 가져오는 과정 셀렉트 키는 해당 토큰에 매칭되는 서명되는 개인키에 대한 대응하는 퍼블릭 키를 가져오는것

  • 헤더값 생성하고 헤더값에 맡는 값을 요청한다

  • 어떤 리퀘스트?
  • yml 설정한 주소값
  • 여러개의 키정보들

  • 3개정도의 키를 가져왓따.
  • 현재 토큰에서 검증할 수 있는 공개키를 3개 키안에서 선택해야된다 그 과정이 안에서 이루어짐.

  • 3개중 하나 선택하고

  • 3개중에 하나 선택하고 이 키를 가지고 검증해야 된다.

  • verifier 토큰 검증하는 클래스 -> 퍼블릭키를 설정하고 verify를 계속 한다.
  • 결과가 true 면 검증에 성공

  • 최종 성공하고 토큰 만듬. 클레임 정보등

업로드중..

  • 최종적으로 성공!
profile
어제의 나보다 한걸음 더

0개의 댓글