Spring 135

[JWT] 2-3. Practical Application: OAuth2 & OpenID

1. JWTs and OAuth2JWT를 Access Token으로 사용토큰 안에 권한 범위, 사용자 정보, 접근 권한 등을 직접 담을 수 있음토큰 유효기간을 지정할 수 있음디지털 서명이 되어있어 resource server에서 자체적으로 검증 가능 (매번 authorization server에 인증 요청을 하지 않아도 됨)많은 IdP들이 JWT 형식으로 Access Token을 발급함 JWT를 Refresh Token으로 사용Authorization Server에 보내서 새 Access Token을 발급받음 2. JWTs and OpenID ConnectOpenID Connect Flows and JWTs 3. Exampleauthorization server를 두어 특정 로그인 제공자에 종속되지 않고..

[Spring Security] 7-2. OAuth2 Client: Authorization Grant Support

1. Authorization CodeInitiating the Authorization RequestOAuth2AuthorizationRequestRedirectFilter로그인 요청을 시작하는 필터OAuth2AuthorizationRequestResolver를 사용해서 OAuth2AuthorizationRequest 생성user-agent를 Authorization Sever의 authorization endpoint로 리디렉션함 OAuth2AuthorizationRequestResolver웹 요청 정보에서 OAuth2AuthorizationRequest를 구성해주는 역할 PKCE (Proof Key for Code Exchange)항목내용목적Authorization Code 탈취 방지- code는 ..

[Spring Security] 6-4. OAuth2 Login: OIDC Logout

1. Local Logout2. OpenID Connect 1.0 Client-Initiated Logoutclient가 사용자의 로그아웃을 OpenID Provider까지 전달하는 방식Discovery + Session Management를 지원하는 OP만 가능issuer-uri 설정을 통해 end_session_endpoint 자동 획득OidcClientInitiatedLogoutSuccessHandler를 사용함 작동 방식사용자가 로그아웃 요청 (/logout)Spring Security는 OidcClientInitiatedLogoutSuccessHandler 실행해당 handler는 end_session_endpoint로 redirect 요청 보냄파라미터: id_token_hint, post_lo..

[Spring Security] 6-3. OAuth2 Login: Advanced Configuration

HttpSecurity.oauth2Login()는 OAuth2 Login 커스터마이징을 지원하는 옵션들을 제공엔드포인트역할 설명사용 상황관련 필터 / 컴포넌트Authorization Endpointuser-agent를 통해 인가 코드 받기로그인 버튼 클릭(로그인 시작)OAuth2AuthorizationRequestRedirectFilterRedirection Endpoint인증 서버가 인증 결과를 클라이언트로 리디렉션로그인 후OAuth2LoginAuthenticationFilterToken Endpoint인가 코드를 가지고 토큰 요청 (access token, id token, refresh token 등)인가 코드 받은 후OAuth2LoginAuthenticationProviderUserInfo End..

[Spring Security] 6-2. OAuth2 Login: Core Configuration

유저가 oauth2 provider 또는 openid provider를 통해 애플리케이션에 로그인하도록 도와주는 기술Spring Security는 공식적으로 Google과 Github을 지원합니다. 1. Spring Boot Sample (Google)2. Spring Boot Property MappingsOAuth2Client 자동설정을 제공applicaion.yml ↔️ ClientRegistration 객체의 대응되는 속성으로 간단히 설정할 수 있음표) applicaion.yml ↔️ ClientRegistration더보기Spring BootClientRegistrationspring.security.oauth2.client.registration.[registrationId]registratio..

[Spring Security] 6-1. OAuth2

1. OAuth2 Resource Server보호된 자원에 대한 요청에 대하여, 인증 과정을 거쳐 자원을 응답하는 서버 Protect Access with an OAuth2 Access Token구분설명사용 구성JWT자체 서명 토큰 (일반적인 OAuth2/JWT 기반 API 보호)자체 디코딩 가능 (검증용 public key만 있으면 됨)Opaque Token토큰 내용을 알 수 없는 토큰introspection 엔드포인트로 검증(외부 인증 서버에서 introspection 제공 시 사용 가능) 설정) JWT더보기spring: security: oauth2: resourceserver: jwt: issuer-uri: https://my-auth-server.co..

[Spring Security] 4-2. Authorization: HttpServletRequests

request levet에서의 인가를 구현할 모델을 제공합니다.특정 prefix의 url에 대한 인가 권한을 요구할 수 있음HttpSecurity 객체를 통해 인가 룰을 정의할 수 있음 1. Understanding How Request Authorization Components Work 인가 동작 순서 (AuthorizationFilter)SecurityContextHolder에서 인증 정보를 가져오는 Supplier 생성Supplier와 HttpServletRequest를 AuthorizationManager에 전달authorizeHttpRequests()에 정의된 규칙들과 매칭하여 인가 판정 인가 실패AuthorizationDeniedEvent 이벤트 발생AccessDeniedException이 ..

[Spring Security] 4-1. Authorization: Architecture

1. AuthoritiesGrantedAuthority인증된 사용자가 가지고 있는 권한을 나타내는 객체단순 문자열로 권한을 표현함Authentication 객체 안에 리스트 형태로 저장됨 복잡한 권한 구조복잡한 권한 구조일 경우, 단순 문자열로 표현하기 어려움이런 경우, AuthorizationManager가 그 객체의 권한 부여 책임을 담당함Authorities의 getAuthority()는 null을 반환함 예시) 특정 계좌에만 접근 가능한 권한더보기권한 객체public class AccountAccessAuthority implements GrantedAuthority { private final Long accountId; public AccountAccessAuthority(Long ..

[Spring for Apache kafka] Apache Kafka Streams Support

1. Basics주요 구성 요소구성 요소설명예시StreamsBuilder스트림 처리 로직을 정의하는 객체 생성KStream, KTable 등KafkaStreams스트림들을 실제로 실행하는 객체- kafka 클러스터와 연결- 스트림 처리 시작 (토폴로지 실행)- 스트림 처리 종료- KStream연속된 이벤트 스트림 - insert (append-only 로그 형식)카드 결제 기록, 서버 로그 등- KTable상태 변경 기록- update집계 테이블 등 동작 흐름StreamsBuilder: Stream 처리 로직 정의StreamsConfig: 설정 (Kafka 클러스터 정보, 기본 직렬화/역직렬화 설정, 보안 설정 등)KafkaStreams: 스트림 처리 시작KafkaStreams: 스트림 처리 종료 2. ..

[Spring for Apache Kafka] Exactly Once Semantics

1. Exactly Once Semantics읽기 → 처리 → 쓰기 과정이 정확히 한 번만 실행되는 것을 보장 2. 처리 흐름컨슈머KafkaAwareTransactionManager를 리스너 컨테이너에 설정하면, 리스너 호출 전에 트랜잭션을 시작합니다.리스너 내부에서 수행하는 KafkaTemplate 작업들은 트랜잭션에 참여합니다.리스너가 정상적으로 처리하면,producer.sendOffsetsToTransaction()를 호출해서 컨슈머 오프셋을 트랜잭션에 포함시킵니다.이후 트랜잭션을 커밋합니다.리스너에서 예외가 발생하면,트랜잭션을 롤백하고,컨슈머는 오프셋을 다시 설정해서, 실패한 레코드를 다음 poll() 때 다시 읽어 재처리합니다 3. 셋팅spring: kafka: producer: ..