
스프링 시큐리티 내용이 많다보니 개요와 전체적인 흐름, 사용법을 나눠서 정리하겠다.
스프링 시큐리티, 이름도 거창하다. 특히 국비지원 학원을 다닐 때도 프로젝트에 꼭 넣었으면 좋겠다고들 하지만, 정작 진행하려고 하면 너무 어려워서 그냥 복붙했던 것 같다. 실무에서 적용하려고 할 때도 너무 어려워서 책, 강의 등을 찾았다. 하지만 돌이켜보면 가장 중요한 것은 스프링 시큐리티 레퍼런스와 용어들, 그리고 흐름을 알면 되는 것이었다!
Spring Oauth Client2를 사용하면서 이번에 제대로 정리해보려고 한다.
사실상의 표준입니다. (출처: docs.spring.io/spring-security)스프링 하위 프레임워크 로 자바 기반의 엔터프라이즈 소프트웨어에 보안을 제공합니다. (출처: 위키피디아) 본인 요약: 스프링의 시큐리티(보안)이라는 용어처럼 스프링 생태계와 잘 어울리며, 사실상의 표준이자 (통합성) 많은 기능들을 제공한다. 특히 엔터프라이즈 애플리케이션 보안을 제공한다.
특정 리소스에 액세스하려는 사람의 신원을 확인하는 방법이다. 스프링 시큐리티는 강력한 인증 메커니즘을 제공하여 사용자가 누구인지 확인하고, 다양한 인증 방식을 지원한다.사용자 역할에 기반한 접근 제어와 더욱 세밀한 접근 제어 전략을 지원한다.쉽게 말해, 암행어사 출두야 API를 시전하고 싶다면,
- 인증: 먼저 내 신분, 직위를 확인해야한다. 마패(username, password)를 통해 암행어사임을 확인
- 인가: 나는 이제부터 암행어사다. 근데, 암행어사여서 뭐? 암행어사(Role)에게 허락된 권한이 출두야(RoleAuthority) 이기 때문에 암행어사라면 출두야를 외칠 수 있는 것이다.
현재 최신 버전이 6.1.2인 만큼, 업데이트가 자주 되는 편이고 그로 인해 사람들의 불만과 학습 난이도가 어려워지는 것 같다는 불만이 많은 것 같다. 특히,WebSecurityConfigurerAdapter Deprecated 등...
유튜브 댓글 반응들 참고
Apache Shiro: Apache Shiro는 인증, 권한부여, 암호화, 세션 관리를 처리하는 강력하고 유연한 오픈소스 보안 프레임워크입니다. Shiro는 스프링 시큐리티처럼 스프링 부트와의 깊은 통합은 가지고 있지 않지만, 간결함과 직관성으로 알려져 있습니다.
Apache-Integrating Apache Shiro into Spring-Boot Applications
Introduction to Apache Shiro
스프링 시큐리티 vs Apache Shiro
한글-Apache Shiro 소개
OAuth2: OAuth2는 스프링 시큐리티와 함께 자주 사용되지만, 인증 프로토콜로서 별도로 사용될 수도 있습니다. OAuth2를 사용하면 사용자가 암호를 제공하지 않고도 앱에 다른 애플리케이션에서의 정보 접근 권한을 부여할 수 있습니다. 이는 사용자의 실제 로그인 자격 증명을 다룰 필요가 없는 더 안전한 로그인 시스템을 생성하는 데 사용할 수 있습니다.
Spring Boot and OAuth2 공식 가이드
스프링 시큐리티없이 OAuth 로그인 구현하기
Keycloak: Keycloak는 OpenID Connect, OAuth2, SAML과 같은 표준 프로토콜을 지원하는 오픈소스 신원 및 접근 관리 솔루션입니다. Keycloak은 Single-Sign On, Identity Brokering, Social Login, User Federation 등의 기능을 제공합니다. 스프링 시큐리티와 다른 목적으로 사용되기에 대안이라기보다는, 연동해서 사용한다. 쉽게 말해, Keycloak은 사용자 ID 및 SSO를 처리, Spring Security는 애플리케이션의 더 세밀하고 복잡한 보안 요구 사항을 처리.
Baeldung-A Quick Guide to Using Keycloak With Spring Boot
Spring Boot에서 Keycloak 사용에 대한 빠른 사용방법
keycloak 스프링부트 적용기
=> 그럼에도 스프링시큐리티가 스프링 생태계와 잘 어울리고, 엔터프라이즈 애플리케이션 보안을 제공하기에 실무에 사용하기에는 무난한 것 같다.
| 영어 | 용어 | 설명 |
|---|---|---|
| Authenticate | 인증 | 접근하려는 유저가 누구인지 확인하는 절차(회원가입, 로그인) |
| Authorization | 인가 | 인증된 사용자에 대해서 권한을 확인하고 허락하는 것 |
| Context | 저장공간 | |
| Grant | 부여 | |
| Provider | 제공자 | |
| Manager | 관리자 | 처리를 담당한다. |
| Role | 역할 | 여러 Authorities를 포함할 수 있는 포괄적인 permission |
| Authority | 권한 | Authorities는 기능 단위의 permission |
| 영어 | 용어 | 설명 |
|---|---|---|
| Principal | 접근 주체 | 보호된 대상에 접근하는 유저 |
| Credential | 비밀번호 | 대상에 접근하는 유저의 비밀번호 |
| UserDetails | 인증 부과 정보 | 유저 정보를 UserDetails 구현체로 사용 |
| UserDetailsService | 로드된 사용자를 기반으로 UserDetails 객체를 생성하는 Service | loadUserByUsername(String) 메서드를 구현 |
| SecurityContextHolder | SecurityContext 사용 | |
| SecurityContext | 인증된 사용자가 저장되는 저장소 | SecurityContextHolder 와 Authentication 을 포함(접근 주체와 인증에 대한 정보를 담고 있는 Context). |
| Authentication | 사용자가 인증을 위해 제공한 자격증명 또는 현재 사용자의 증명 제공 | |
| GrantedAuthority | 부여된 권한 | Role과 Authority 모두 부여된 권한으로 취급한다. |
| AuthenticationManager | 스프링 시큐리티의 인증을 담당 | 스프링이 어떻게 인증을 할지 정의한 인터페이스 |
| ProviderManager | AuthenticationManager 실제 구현 객체 | AuthenticationProvider 중에 인증이 가능한 인터페이스를 찾음 |
| AuthenticationProvider | ProviderManager가 인증이 가능한 구현 객체를 찾음 | |
| AuthenticationEntryPoint | 클라이언트에게 인증을 요청 | |
| PasswordEncoder | 원시 비밀번호 인코딩 | 메서드: encode, matches |
| SecurityFilterChain | 연쇄적인 보안 필터 체인 | 여러개의 필터를 연쇄적으로 실행 |
스프링시큐리티 가이드
스프링-스프링시큐리티 레퍼런스
5.4.6버전 스프링시큐리티 기본 구조
5.3.2버전 한글화 문서
사용법 위주의 웹애플리케이션 보안
스프링시큐리티 버전 및 샘플
스프링시큐리티 컴포넌트 라고 생각하면 된다.스프링 공식 문서
Spring Security is a powerful and highly customizable authentication and access-control framework. ... Spring Security is a framework that focuses on providing both authentication and authorization to Java applications
제어 흐름과 개발자가 코드 실행에 대해 얼마나 제어할 수 있는지의 차이 다. 웹 요청(Web Request)에 기반한 보안을 제공 하는 것이 주 목적이며, 인가 프로세스를 통해 자원에 대한 접근을 제어할 수 있다. 웹 페이지, REST API, DB 레코드 등을 의미한다. 구조와 컴포넌트 등 공식문서 정리해주심
최범균님-전반적인구조(2014년
(2017년)레퍼런스 창고
스프링시큐리티 번역 정리
스프링시큐리티 이론 정리
스프링시큐리티에서 중요한 컴포넌트들
스프링 시큐리티의 아키텍처(구조) 및 흐름
스프링 시큐리티 기본 API및 Filter 이해
공식문서를 기반으로 스프링 시큐리티(Spring Security) 기본 개념과 구조 파악