Filter + Converter 구현 - 4/9(목)Converter (OAuth2TokenEndpointAuthenticationConverter)HttpServletRequest → AuthorizationCodeTokenRequest 변환grant_type, code, redirect_uri, client_id, client_secret 파라미터 추출Authorization 헤더 추출각 파라미터 중복 횟수 카운트 (배열로 추출 후 size 저장)작업 내용Filter (OAuth2TokenEndpointFilter)POST /oauth2/token 요청만 처리 (requiresProcessing 체크)Converter 호출 → AuthorizationCodeTokenRequest 생성provider..
OAuth2AuthorizationEndpointFilter 구현 && Converter 구현 - 4/4(토)/oauth2/authorize 요청을 Filter에서 가로채기Converter 호출 → AuthenticationToken 생성 → Provider 위임Controller 역할 축소 준비HTTP 파라미터 → OAuth2AuthorizationCodeRequestAuthenticationToken 변환중복 파라미터 카운트 처리Filter → Converter → Token 연결 작업 내용OAuth2AuthorizationCodeRequestAuthenticationConverter.java 파일 생성OAuth2AuthorizationEndpointFilter.java 파일 생성 Bean, C..
작업 2.1과 2.4에서 작업한 클래스는 다음과 같다. 우선 SAS에서 어떻게 동작하는지 살펴보자 작업 2.1 ~ 2.4의 SAS 코드 동작 OAuth2ClientAuthenticationFilter에 요청이 들어오면 2가지 컨버터가 실행된다.단, 위 2개의 클래스는 비밀 클라이언트라서 그렇다. 만약 공개 클라이언트면 secret이 없으니 따로 처리한다. 위 2개 클래스는 "먼저 성공하는 Converter 하나만 선택됨”ClientSecretBasicAuthenticationConverter → Basic 인증Authorization: Basic base64(client:secret)BasicConverter → 성공PostConverter → 아예 안 감성공하면 → OAuth2ClientAuthenti..
SAS 인가 엔드포인트 분석 처음에 GET or POST 두 개의 형태로 보낼 수 있다 하지만 우리는 기밀 클라이언트인 Header에 client_secret을 같이 보내주는 전제로 하기 떄문에 POST 형식을 작성하지 않았다. POST는 위 필터 부분에서 다르게 처리 된다. 왜냐하면 POST는 공개 클라이언트 이기 때문 OAuth2AuthorizationCodeRequestAuthenticationConverterGET /oauth2/authorize?response_type=code&client_id=...&redirect_uri=...&scope=...&state=...이건 처음 /oauth2/authorize 요청이 들어왔을 때 선택된다.→ 즉,인가 요청이고response_type=code 같은 ..
작업 2-1: Core 값 객체 추가[ ] AuthorizationGrantType enum[ ] OAuth2AccessToken 값 객체[ ] OAuth2AuthorizationService에 saveAccessToken() 추가[ ] JpaOAuth2AuthorizationService 구현 작업 2-2: 요청 컨텍스트 객체 + ExtractorAuthorizationCodeTokenRequest (불변 요청 객체)ClientCredentials record (별도 파일로 분리)ClientCredentialsExtractor (Basic 헤더 / form 파라미터 추출)ClientCredentialsExtractorTest 단위 테스트 작업 2-3: AuthorizationCodeTokenProvid..
작업 1-1: Core 에러 타입 도입작업 1-1에 대한 내용은 다음과 같았다. 왜 하는가현재 컨트롤러는 "invalid_request", "invalid_scope" 같은 에러 코드를 문자열 리터럴로 직접 작성한다. Validator와 Provider가 에러를 던질 수 있으려면, 공통으로 쓸 에러 타입과 예외 클래스가 먼저 필요하다. 무엇을 만드는가oauth2/core/OAuth2Error.java — record OAuth2Error(String errorCode, String description). 에러 코드와 설명을 하나의 값 객체로 묶는다. Spring Security의 org.springframework.security.oauth2.core.OAuth2Error를 참고하되 직접 구현한다.oa..