Spring Security
일반적인 MSA
Client 가 서비스 요청시 API Gateway는 Auth Service 에게 토큰생성 요청을 하고 이를 클라이언트에게 제공한다. Client는 이 토큰으로 Service에 접근하고 Service 간에는 토큰 없이 통신이 된다.
OpenStack MSA
Keystone은 Auth 서비스 Client 가 https 요청을 하면 service가 토큰을 만들고 Keystone이 검증을 해준다. 그리고 주황색 서비스가 추가적인 동작을 해야할 경우 빨간색 서비스에 토큰과 함께 요청을 전송하면 빨간색 서비스는 키스톤에게 토큰인증을 받고 정보를 처리한뒤 주황색 서비스에게 정보를 리턴한다.
Keystone
- unscoped – 인증을 위한 토큰
- scoped – 액션을 위한 토큰
openstack token
fernet
- fernet – 양방향 키 암호화
- 3가지 Key 파일을 제공
- primay 암호화 복호화 다음에 Staged Key 가 됨
- secondary 복호화 만 가능
- Staged key 복호화와 다음 Primary Key가 됨
JWT(JSON Web Token)
Spring Security
filter – 특정 Request 를 가로채서 Encoding, 특정 패턴을 보고 반려 한다던지의 기능을 함
- https://docs.spring.io/spring-security/site/docs/current/reference/html5/#servlet-authentication-abstractprocessingfilter
- https://docs.spring.io/spring-security/site/docs/current/reference/html5/#servlet-filters-review
- https://docs.spring.io/spring-security/site/docs/current/reference/html5/#servlet-authentication-form (로그인)
장점 : 다른 인증서비스 OAuth 같은 인증 시스템과 쉽게 연동 가능하다.
Filter
Sping Security의 Sevlet은 Servlet Filter로 되어 있다.
DelegatingFilterProxy
빈으로 등록된 Filter를 등록할 수 있다.
FilterChainProxy
Spring Security에서 제공하는 특수 필터로 다양한 필터 인스턴스를 SecurityFilterChain을 통해 위힘한다.
SecurityFilterChain
Security Filter를 Chain으로 묶어서 처리, 요청 URL에 맞게 처리가 가능
filter stack
https://docs.spring.io/spring-security/site/docs/current/reference/html5/#filter-stack
- ChannelProcessiongFilter – HTTPS 관련 처리 제공
- SecurityContextPersistenceFilter – 이용자 request의 보안 관련 Context를 영속하기 위해서 필요한 필터
- ConcurrentSessionFilter – 동시 세션수를 관리함
- HeaderFilter – 헤더 값에 대한 가감을 설정한다.
- CsrfFilter – Csrf 공격에 대해여 처리할 수 있는 필터
- LogoutFilter – logout
- X509AuthenticationFilter – 공개키 기방의 ITU-t 표준 이를 처리하기 위한 필터
- AbstractPreAuthenricationProcessingFilter – 외부 시스템에서 인증 주체가 이미 인증 되었다고 가정하고 해당 필터를 사용
- CasAuthenticationFilter – CAS(중앙인증서비스) 인증 처리를 위한 필터
- UsernamePasswordAuthenticationFilter – user, password 를 기반으로 인증 처리를 위해 제공되는 Filter
- BasicAuthenticationFilter – Http 기본인증을 처리하기 위해서 제공되는 필터, 브라우자가 username 이나 Password를 받는 경우
- JaasApiIntegrationFilter – JAAS 란 자바 프로그래밍 언어의 보안 프레임워크
- RememberMeAuthenticationFilter – 세션이 사라지더나 만료가 되더라도 쿠키 또는 DB를 이용하여 저장된 토큰 기반으로 인증을 처리하는 필터
- AnonymousAuthenticationFilter – 익명사용자 처리를 위한 필터
- SessionMagagementFilter – 세션 변조 공격 방지기능
- ExceptionTranlationFilter – 인증및 인가에 대한 예외 처리 필터
- FilterSecurityInterceptor – 특정 리소스로 접근하게 되면 최종 접근 전에 AccessDecisionManager를 사용하여 인가처리를 하는 필터
- SwichUserFilter – 이용자 전환 처리를 위한 필터 이용자의 정보를 전환하고자 하는 대상과 바꾸게 된다.
UsernamePasswordAuthenticationFilter
Http Security에 formLogin() 설정함으로 조작 가능하다. userDetail과 UserDetailsService를 활용하여 인증한다.
인증 구조
User Detail Service – JDBC 나 다른 서버등 에서 인증정보를 불러와 사용자가 입력한 인증정보와 비교 한다. AuthenticationManager가 Authenticate 메서드를 호출하면 UserDetailService가 호출된다.
Authentication Successful Handler – 인증 성공시 메인 페이지로 가거나 하는 설정을 할 수 있다. 인증에 대한 후처리
Ant Matchers – Request URL path에 대해 어떤 동작을 하게 할지 설정 할 수 있다.
- WebSecurityConfigurerAdapter를 상속 받아 HttpSecurity 및 WebSecurity를 설정하고 Filter 및 Provider를 등록 한다. HttpSecurity 설정은 login page, cors, csrf 등 다양하게 할 수 있다. provider는 JWT 혹은 Username, Password 로 인증을 제공하는 역할을 한다.
- Username, Password로 인증을 처리하고 싶은 경우 UsernamePasswordAuthenticationFilter를 상속받아 Custom filter를 작성한다. 그리고 처리한 데이터는 Authentication Manager로 넘겨서 인증 처리를 한다.
- 인증 성공 및 실패에 대해 Handler를 등록한다.
이용자 정보
Spring Security는 이용자의 소유권을 확인해 주는 것과 더블어 권한, 역할, 활성화 여부 등에 대한 정보를 제공하고 이를 통하여 인증을 하게 된다.
인가 : 이용자의 권한을 의미하는 것
다양한 이용자 정보를 제공할 수 있다.
in-memory, JDBC, LDAP, SAML, OAuth
OAuth – 서버, 클라이언트가 있다. 소셜미디어 로그인처리 Oauth Client , Spring Security는 Oauth 서버 기능도 제공한다.
MFA
다요소 인증, 추가 인증, 문자 메시지 인증 방식, 구글의 2차 인증 , OTP 인증 등등등
- SMS Token 인증
- Email Token 인증
- Software 토큰 – KT 패스 등
- 하드웨어 토큰 인증
- 핸드폰 인증
- 생체 인증
인증요소
지식 –
possession – 사용자가 가지고 있는 것 토근 같은
Heritage – 사용자 그 자체의 것 // 얼굴, 지문, 목소리 등등
장소-
시간 – OTP
OAuth
oauth2 (표준) 구성
- resource owner – 서비스를 제공하는 곳의 가입된 이용자 (사용자)
- client – 서비스를 제공하는 곳과 연동 대상 서비스 (네이버)
- Resource Server – 리소스 소유자의 리소스가 제공되는 서버 (페이스북)
- Authorization Server – 권한 서버
* *사용자가 네이버에 로그인 할때 네이버가 페이스북의 User 정보를 이용한다고 가정
Refresh Token
토큰의 유효기간 만료시 사용되게 되는 토큰
Authorization Code Grant
from 패스트 캠퍼스
belong2jesus.tistory.com
블로그 구독하기 !!