JSON Web Token (JWT)
두 당사자 간 전송 대상을 표현합니다.
JWT 클레임은 JSON 개체로 인코딩 되어 클레임을 디지털 서명하거나 무결성을 보호합니다.
JWS(JSON Web Signature) 구조의 페이로드
JWE(JSON Web Encryption) 구조의 일반 텍스트
JWT 인증을 지원하기 위한 Spring Security 아키텍처 구성요소
JwtAuthenticationProvider는
JwtDecoder와 JwtAuthenticationConverter를 사용해서
JWT를 인증하는 AuthenticationProvider를 구현했습니다.
요약하면 AuthenticationProvider 클래스에 있는 JWT 인증을 JwtAuthenticationProvider 클래스에서 구현했습니다.
JwtAuthenticationProvider 역할
인코딩된 엑세스 토큰을 디코딩하고 확인해서 클레임 세트를 반환하는 AuthenticationProvider 역할을 맡고 있습니다.
Bearer Token (무기명 토큰)
사용자의 실제 식별 정보를 포함하지 않고 임시적, 익명 상태를 나타내는 토큰입니다.
무기명 토큰은 일반적으로 인증된 사용자와 구별되며 일시적 세션 또는 익명 사용자를 다루기 위해 사용됩니다.
토큰은 사용자 개인 정보를 보호하고 필요한 경우만 서비스에 접근하도록 허용 가능합니다.
OAuth
OAuth는 리소스 소유자를 대신해 안전한 리소스 접근 방법을 제공합니다.
클라이언트가 접근하려면 먼저 리소스 소유자로부터 권한을 부여받고 접근 토큰에 대한 권한을 받아야 합니다.
AuthenticationManager 작동방식
1. Bearer Token AuthenticationToken : Token
Bearer 토큰 읽기로 ProviderManager에 의해 AuthenticationManager 에게 전달됩니다.
2. AuthenticationManager : ProviderManager -> AuthenticationProviders : JwtAuthenticationProvider
ProviderManager는 AuthenticationProvider 구현 클래스 JwtAuthenticationProvider를 사용합니다.
3. JwtDecoder
JwtAuthenticationProvider는 Jwt 디코딩, 검증 작업을 진행합니다.
4. JwtAuthenticationConverter
JwtAuthenticationProvider는 JwtAuthenticationConverter를 사용해서 Jwt가 부여된 권한 컬렉션으로 변환합니다.
5. JwtAuthenticationToken : Jwt, Authorities
인증이 성공하면 JwtAuthenticationToken 유형이며 구성된 Jwt 주체를 갖습니다.
최종적으로 반환된 JwtAuthenticationToken은 인증 필터에 의해 SecurityContextHolder에 설정됩니다.
Spring Security 인증 모델 핵심 SecurityContextHolder
- SecurityContextHolder
- SecurityContext
- Authentication : Principal / Credentials / Authorities
SecurityContextHolder는 인증된 사람에 대한 세부 정보를 저장합니다.
Authentication 인터페이스 역할
Spring Security 내에서 두 가지 목적 제공
1. 사용자가 인증을 위해 제공한 자격 증명을 제공. isAuthenticated() 입니다.
2. 현재 인증된 사용자를 제공합니다.
principal : 사용자를 식별합니다. 사용자 이름 / 비밀번호로 인증할 때 자주 사용되는 인스턴스입니다 -> UserDetails
credentials : 비밀번호인 경우가 많습니다. 유출되지 않도록 사용자 인증이 완료되면 삭제됩니다.
authorities : GrantedAuthority 인스턴스는 사용자에게 부여되는 높은 수준의 권한입니다.
JPA, H2 database 설정 (0) | 2021.12.12 |
---|---|
Springboot Querydsl 설정 (0) | 2021.12.11 |
Spring, Bean, IoC, DI 개념에 대한 정리 (0) | 2021.10.19 |
[JSP 연결] Spring Boot + Gradle + IntelliJ (0) | 2018.05.20 |
[개발환경] Spring Boot + Gradle + IntelliJ 프로젝트 생성하기 (0) | 2018.05.20 |
댓글 영역