Spring/Spring Security 34

[Spring Security] 8-1. OAuth2 Resource Server

1. OAuth2 Resource Server보호된 자원을 관리하는 서버✅ 보호된 자원의 요청에 대한 인증 과정을 담당함 Protect Access with an OAuth2 Access Token구분설명검증JWT자체 서명 토큰public key 사용Opaque Token토큰 내용을 알 수 없는 토큰인정 서버의 introspection 엔드포인트에 확인 요청 설정) JWT더보기더보기spring: security: oauth2: resourceserver: jwt: issuer-uri: https://my-auth-server.com@Configuration@EnableWebSecuritypublic class SecurityConfig { @Bean ..

[Spring Security] 8-2. OAuth 2.0 Resource Server: JWT

1. Minimal Dependencies for JWT의존성 모듈역할spring-security-oauth2-resource-server리소스 서버 기본 기능spring-security-oauth2-joseJWT 디코딩 및 서명 검증 기능 2. Minimal Configuration for JWTsissuer-uri토큰을 발급한 Authorization Server의 발급자 주소단계동작의미1issuer-uri 기반으로 메타데이터 엔드포인트 호출인증 서버 정보 조회2메타데이터에서 jwks_uri 확인공개키 목록 위치 찾기3jwks_uri로 공개키 조회JWT 서명 검증용 키 확보4JwtDecoder 자동 구성JWT 검증기 생성5JWT의 iss 클레임 검증설정한 issuer와 토큰 issuer가 같은지 확인..

[Spring Security] 8-3. OAuth2 Resource Server: 동작 방식

리소스 서버는 외부 인가 서버에 인증/인가를 위임함 (요청을 통해 인증 토큰 검증) 1. Bearer Token 인증 동작 방식인증 요청 처리 흐름사용자: secured resource 요청 (Bearer Token 포함 ✅)BearerTokenAuthenticationFilterDefaultBearerTokenResolver: BearerTokenAuthenticationToken 반환 (request 기반)AuthenticationManagerResolver: AuthenticationManager 선택 (request 기반)AuthenticationManager: BearerTokenAuthenticationToken 검증인증 실패SecurityContextHolder 비움BearerTokenAut..

[Spring Authorization Server] 2. Core Model / Components

1. RegisteredClientAuthorization Server에서 등록된 OAuth2 Client 정보를 나타내는 객체 표) 주요 속성더보기필드설명예id내부 시스템에서 고유하게 식별되는 UUID clientId외부 클라이언트가 사용하는 고유 식별자client-aclientSecret클라이언트 비밀번호. PasswordEncoder로 인코딩된 값 clientAuthenticationMethods클라이언트 인증 방식client_secret_basic private_key_jwt authorizationGrantTypes클라이언트가 사용할 수 있는 grant type 목록refresh_tokentoken_exchangeredirectUrisauthorization_code flow에서 사용할 redi..

[JWT] 2-1. Federated Identity

1. Federated Identity서로 다른 시스템 간에 사용자 인증과 권한 부여를 공유할 수 있도록 해주는 방식사용자 신원 정보는 중앙 집중형으로 관리됨 특징사용자 입장에선 하나의 로그인으로 여러 서비스 이용 가능 2. 동작 흐름 과정더보기사용자: 리소스 서버의 보호된 자원에 접근 시도사용자: 권한이 없으므로 리소스 서버가 인가 서버로 리디렉션사용자: 다시 신원 제공자(IDP)의 로그인 화면으로 리디렉션사용자: 로그인 성공인가 서버: 인증 정보 응답 (redirect_uri로 리디렉션)인가 서버: 필요한 JWT나 토큰을 포함한 요청으로 리소스 서버에 리디렉션사용자: 리소스에 접근 성공 보안모든 흐름은 URL 리디렉션을 통해 사용자 브라우저를 경유함TLS 사용이 필수

[JWT] 4. JSON Web Signatures (JWS)

0. JWS서명제3자에 의해 위조되지 않았음을 증명생성자가 누군지 확인할 수 있음 Validation헤더와 페이로드에 명시된 조건을 충족옵션) 사용자 정의 조건도 추가 가능 1 Structure of a Signed JWT예시) Header더보기{ "alg": "HS256", // 서명 알고리즘 "typ": "JWT" // 타입 (JWT 고정)} 예시) Payload더보기{ "sub": "1234567890", "name": "John Doe", "admin": true} 예시) Signature더보기HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret) 알고리즘알고리즘서명 방식키 구조특징..

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

1. JWTs and OAuth2클라이언트가 보호된 자원에 접근할 권한을 위임받는 프레임워크 JWT를 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 JWTsAuthorization Code Flo..

[Spring Authorization Server] 1. Configuration Model

1. Introducing Spring Authorization ServerOAuth2.1과 OpenID Connection 1.0 기반의 Authorization Server를 구현할 수 있도록 지원하는 Spring 프레임워크 역할OAuth2 Client 등록 및 인증사용자 인가 처리Authorization Code 발급Access Token & Refresh Token 발급Token IntrospectionToken RevocationOpenID Connect ID Token 발급Authorization Server Metatdata 제공 2. 장점경량화된 서버 구조: 상용 제품 대비 불필요한 기능 없이 핵심 기능만 포함되어 있음개발 편의성: Spring Security와 유사한 설정 구조 제공구성 ..

[Spring Security] 7-4. OAuth2 Client: Authorized Client Features

1. Resolving an Authorized Client@RegisteredOAuth2AuthorizedClient컨트롤러 메서드에서 OAuth2AuthorizedClient를 주입받을 수 있음OAuth2AuthorizedClientArgumentResolver에 의해 주입됨OAuth2AuthorizedClientArgumentResolver는 OAuth2AuthorizedClientManager를 사용하여 가져옴OAuth2AuthorizedClientManager는 Repository와 Provider에게 위임하여 OAuth2AuthorizedClient를 반환함Provider의 전략 객체별 조건을 만족해야 동작함 예시) OAuth2ClientController더보기@Controllerpublic ..

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

1. Authorization Code Grant와 PKCEAuthorization 요청 시작 (OAuth2AuthorizationRequestRedirectFilter)로그인 요청을 시작하는 필터사용자가 /oauth2/authorization/{registrationId} 으로 로그인을 시도함OAuth2AuthorizationRequestResolver를 사용해 OAuth2AuthorizationRequest 생성현재 웹 요청과 ClientRegistration을 이용해 OAuth2AuthorizationRequest를 만드는 전략 인터페이스user-agent를 Authorization Sever의 authorization endpoint로 리디렉션 PKCEProof Key for Code Exchan..