티스토리 뷰

인증을 알아보기 이전에, 스프링 시큐리티의 필터를 먼저 알아야한다. 필터에서의 주요 개념들은 이전 글을 통해 확인할 수 있다.

2024.11.17 - [Framework/Spring] - Spring Security 의 첫 걸음

 

Spring Security 의 첫 걸음

스프링 시큐리티에 대해 전무한 상태였다.스프링 시큐리티를 이용하면 사용자의 인증, 인가 그리고 보안 처리를 할 수 있다. 그 과정에서 필터는 가장 중요한 핵심이라는 것을 알게 되었지만 그

yeongnius.tistory.com

 

스프링 시큐리티에서 인증은 어플리케이션 보안의 첫 번째 단계이다. 어플리케이션에 접근하려는 사용자가 누구인지 확인하는 절차는 보안의 시작이자 중요한 요소 중 하나이다. 나중에 알아 볼 인가(Authorization)의 기반이 되기도 하는 인증을 진행하기 위한 주요 개념들과, 인증은 어떤 과정으로 진행되는지 알아보려고 한다.


인증(Authentication)

특정 리소스에 접근하려는 사람의 신원을 확인하는 방법이다.

사용자를 인증하는 일반적인 방법은 사용자에게 사용자 이름과 비밀번호를 입력하도록 요구하는 것이다.

한번 인증이 완료되면 서버는 사용자의 신원을 확인하고, 이후 해당 사용자가 요청하는 작업에 대해 인증 여부를 바탕으로 처리를 진행할 수 있다. 스프링 시큐리티는 사용자 인증 과정을 효과적으로 지원하기 위해 다양한 기본 기능을 제공한다.

 

인증을 위한 주요 개념

 

SecurityContextHolder

SecurityContext를 현재 실행 스레드와 연결하는 클래스로, SecurityContext를 포함한다.

기본적으로 ThreadLocal을 사용하여 SecurityContext를 생성하고 사용자의 세부 정보를 저장하는데, 이는 각 사용자의 인증 및 보안 정보를 독립적으로 관리한다는 것이다. ThreadLocal을 사용해서 요청에 대한 정보를 스레드 단위로 저장하는 것은 안전한 방법이지만, 현재 요청(Principal에 대한 요청)이 처리된 이후에는 해당 스레드의 정보를 반드시 초기화해야한다.

스프링 시큐리티의 FilterChainProxy는 SecurityContext를 자동으로 초기화해준다.

 

SecurityContext

SecurityContextHoler에 의해 생성되며, 인증 관련 객체인 Authentication 객체를 포함한다. 사용자의 인증 상태와 보안 정보를 보관하는 객체로, 어플리케이션 전반에서 인증과 권한을 관리하는 핵심적인 역할을 한다.

 

Authentication

Principal 사용자를 식별(사용자 이름 또는 사용자 식별 고유 정보)하는 객체이다.

보통 UserDetails의 인스턴스인 경우가 많다. 사용자의 인증이 완료되면, 이 객체는 인증된 사용자에 대한 정보를 포함하게 된다.

Credentials 인증에 필요한 정보로, 보통 비밀번호가 해당된다. 비밀번호인 경우가 많은데, 사용자가 인증된 후 지워진다.

Authorities GrantedAuthority 인스턴스로, 사용자가 가지고 있는 권한을 나타낸다. GrantedAuthority 인스턴스는 일반적으로 UserDetailsService에 의해 로드된다.

 

GrantedAuthority는 또한 이는 어플리케이션 전반에 걸쳐 사용되는 권한을 나타낸다. 중요한 점은 권한이 특정 도메인 객체에만 부여되는 것이 아니라 일반화된 형태로 관리된다는 것이다. 특정 객체에 권한을 세분화하여 저장하기보다는, 권한을 추상화하고 포관적으로 관리하는 것이 성능과 보안 면에서 적합하다.

 

AuthenticationManager

스프링 시큐리티의 필터가 인증을 수행하는 방법을 정의하는 API이다.

Authentication은 AuthenticationManager를 호출한 스프링 시큐리티의 필터 인스턴스에 의해 SecurityContextHolder에 설정된다.

가장 일반적인 구현은 ProviderManager이다.

 

ProviderManager

AuthenticationManager의 일반적인 구현체로, 여러 개의 AuthenticationProvider 인스턴스를 리스트로 가진다. 각 AuthenticationProvider는 인증이 성공해야 할지, 실패해야 할지, 인증 여부를 확인할 수 없ㄷ는지 결정할 수 있다. AuthenticationProvider 인스턴스 목록에 위임한다.

 

 

 


참고

실전 스프링 부트

https://docs.spring.io/spring-security/reference/servlet/authentication/architecture.html#servlet-authentication-authentication

 

Servlet Authentication Architecture :: Spring Security

ProviderManager is the most commonly used implementation of AuthenticationManager. ProviderManager delegates to a List of AuthenticationProvider instances. Each AuthenticationProvider has an opportunity to indicate that authentication should be successful,

docs.spring.io

 

 

 

'Framework > Spring' 카테고리의 다른 글

Spring Security 의 첫 걸음  (0) 2024.11.17
auto-configuration에 대하여  (0) 2024.10.23
[Web] Servlet 과 Servlet Container  (0) 2022.12.26
[Spring] DispatcherServelt (Feat. Front Controller)  (0) 2022.12.16
[Spring] 순환 참조  (0) 2022.12.13
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함