API 커스텀 구현 - OAuth2AuthorizationRequestResolver(1)

존스노우·2023년 8월 31일
0

springSecurity

목록 보기
35/75

  • 1단계 일때 사용하는 클래스?

  • 커스텀하게 할수 있는 법을 알아보자

  • 다른파라미터 추가? 표준 클라이언트Id 리다이렉트 Url등.. 이거 외에 커스텀하게?

  • 커스텀하게 설정하지 않으면 DefaultOAuth2AuthorizationRequestResolver 실행

  • OAuth2AuthorizationRequestResolver 이 클래스가

  • 작동하기위해 요청정보에 들어오는 Url 정보랑 레지스트레이션 레포지토리 필요

  • 2가지 코드방식과 임플릭 방식 1가지.

코드구현

  • 홈컨트롤러

  • 화면 코드

  • url 마지막 부분만 3개가 다른이유는 레지스트레이션 아이디들이다.

  • 여러개의 설정을 쓸수 있고 프로바이더는 1개만 공통으로 사용한다.

  • clientAuthenticationMehthod: none으로 해야 PKCE 방식으로 작동

  • none : 클라이언트 자격증명을 공개적으로 클라이언트ID 가지고 권한부요청을 하겠다.

  • 근대 저 설정대로하면 오류가나서 변경이필요함

  • 3개 만들기!

  • 서버 기동 시 홈 화면

AuthorizationCode Grant

  • 인증 완료

PKCE

  • 인가서버로 보낼 매개 변수를 담는 객체

  • 권한 부여 방식이 인증 코드인가?
  • 스코프에 값이 비어있나?
  • 스코프에 OPENID 포함되어있나?
  • 트루이면 Nonce값을 추가한다

  • 값 셋팅하고 해쉬 함

  • 클라이언트메소드 값이 NONE 냐 ??

  • PKCE 관련 설정들 .
  • accept하면 바로위 applyPkce로
  • Pkce 적용 안돼있으니 밑으로
  • 키를 생성 codeVerifier 원본문자열 이 값을 헤쉬해서 인가서버로 전달
  • 저장을 한다음.
  • 파라미터 셋팅 -> 인가서버로 갈때 저장된다.
  • 코드챌린지도 저장 됨. 해쉬 값으로 생성하겠다
  • 이렇게 PKCE가 만들어 지면서 빌더 속성으로 만들어짐

  • 최종적으로 인가서버에 전달되는 값들
  • 이렇게 전달되면 PKCE처리를 인가서버가 처리해줘야된다.

  • 인가서버는 이렇게 설정해줘야 된다.

  • 포함되어 날라가는 값들

  • 코드 받을땐 클라이언트 아이디만 필요해도 되는데..

  • 그러나 2단계에선 클라이언트 시크릿이필요한데 ? 토큰을 발급받기위해 기밀 같은경우는 시크릿이 필요함.

  • 1단계에선 성공하는대 2단계는?

  • 일단 임시코드는 받았으니 토큰요청을 해야됨

  • 앞에서 설정한 정보를 가지고 있는 객체

  • 프로바이더 처리...

  • 인가서버에 보낼 값들을 설정함



  • 엑세스 토큰을 받기위한것인데 클라이언트 id 만있고 시크릿은 없다

  • 통과가 안돼서 클라이언트 자격증명을 받지못해 오류가난다

  • 그래서 바꾸면 ? 작동하지 않음

  • None 아니면 PKCE가 작동하지 않는데..

  • 값도 nonce만..

  • 인가서버는 코드챌린지를 필요하다.

  • PKCE 설정을 해놨는데 PKCE로 안오니깐 오류

  • 어떻게해야될까?

  • 일단 시크릿키 만들기위해 설정변경
  • 그리고 요청 바꾸기

  • 우리가 커스텀하게 만들면 됨
  • 기존방식은 디폴트로 PKCE 방식은 여기 클래스로 오게
  • 기존 실행 로직과 PKCE로직 을다르게하기위해
  • resolve 다르게 설정
  • 첫번째 리졸브 분기처리해서 PKCE처리

  • PKCE면
  • 이값들 넣어주고 함

customResolve

  • ㅠㅕㅑ

  • 시큐리티 설정해주기

실행

  • 디폴트 리졸브에서 기본적인 값들을 가져 오고

  • 아직 PKCE 값은 없는상태

  • 여기서 기존에 안돌아갔던 PKCE 관련된 값 넣을게!

  • PKCE 값 잘 전달 됨.

  • 로그인 후

  • 최종적으로 클라이언트 시크릿도 포함되 있어서 인증이 됨! IndeX 화면 출력

  • 이렇게 해도 가능한가?
  • none한다면 클라이언트 자격증명을 인가서버에서 받지않고 토큰을 발급받겠다
  • 그러면 시크릿 키도 필요없네 ?
  • 근데 토큰을 발급받으려면 시크릿키가 필요한데..
  • 그러면 None을하고 시크릿도 안보내고 PKCE기능을 사용하려면?

  • 인가서버가 클라이언트의 인증처리에 검증을 하겠다 클라이언트 아이디와 시크릿을 통해서 클라이언트에 자격증명을 하겠다.

  • OFF로 해버리면? 위에 내용을 검사하지 않겠다.

  • 그럼 인증이 됨

  • 근데 클래스를 만든 이유는?

  • 우리는 보안에 더 강력하게하기위해 클라이언트 시크릿 자격도 통과해야되고

  • 인증방식을 시크릿 베이직 , 포스트 , PKCE도 하겠다 이말임 보안을 더강화하겠따.

  • 실행시키면 커스텀 값들이..
profile
어제의 나보다 한걸음 더

0개의 댓글