Spring/Security

태태개발일지(Spring Security)

태태코 2023. 8. 14. 14:47
반응형

Q. 사이트 자체에 리소스가 있을 것이고, 개인정보들이 있을 것이다.

사람이 악의적으로 정보를 탈취하거나, 변형시키는 것을 막아야하는 데 그것을 도와주는 라이브러리가 - 스프링 시큐리티다.

즉 스프링 시큐리티는 인증, 권한을 다룬다.

 

인증 -> 이메일과 password로 로그인한다.

-Session관리

-토큰 관리 (서버를 여러대 두다보니깐 동기화와, 여러군대 저장문제로 토큰을 사용하기 시작했다)

SNS 로그인으로 인증 위임-> Oauth2

 

인가 혹은 권한

- Secured

-PrePostAuthorize 에너테이션을 통해서 권한을 측정한다.

 

SecurityContextHolder.getContext()를 통해서 저장된 정보를 가져올 수 있다. -> mypage 정보 불러올때 사용

@PrePostAuthorize("hasAnyAuthority('ROLE_USER')") -> User권한이 있어야만 가능하다.

 

 

spring security 큰그림

1. request가 servlet에 도착하기 전에 여러가지 filter를 거쳐야하한다.

2. websecurityconfig가 SucurityFilterChain을 구성하는 녀석이다.

 

spring security Authentication context안에있는 Authentication객체가 authenticatied된 걸로 판단한다.

-> 권한에 따라 다르기도 하다.

 

일부 filter들이 Authentication Manger를 제공한다.

 

1. SecurityContext는 인증을 보관한다.

2. Authentication을 제공해준느 자를 AuthenticationProvider라고한다. -> 이를 관리하는걸 Authentication Manger이라고 하낟.

3.Authentication에서는 credentails랑 details와 GrantedAuthority를 가지고있다.

4.Authentication == 인증 토큰 Authentication은 인터페이스이다. 즉 구현체들이 Authentication 토큰을 사용한다.

 

폼 로그인시 -> UsernamePasswordAuthenticationFilter를 사용하고.

만약 쿠키로그인시-> RememberMeAuthenticationFilter를 사용하여 로그인

or sesstion이용시, SecurityContextPersistenceFilter사용.

 

인증이 안된 사용자일시 -> AnonymouseAuthenticationFilter를 사용.

 

***BasicAuthenticationFilter -> ajax로그인 모바일앱이나, session사용시 

 

 

*Authentication*에는 

1.  authorities -> 권한 정보가 Set구조로 들어가있다.

2. principal -> 인증 대상에 대한 정보, UserDetails 가 들어온다.

3. credentials -> 인증 확인을 위한 정보, 비밀번호.

4. detials -> IP,세션 기타 인증요청에 사용한 정보.

5. boolean authenticated -> 인증되었는가? 확인하는 정보들이 들어있다.

 

 

반응형