스프링 시큐리티 내용이 많다보니 개요와 전체적인 흐름, 사용법을 나눠서 정리하겠다.
스프링 시큐리티, 이름도 거창하다. 특히 국비지원 학원을 다닐 때도 프로젝트에 꼭 넣었으면 좋겠다고들 하지만, 정작 진행하려고 하면 너무 어려워서 그냥 복붙했던 것 같다. 실무에서 적용하려고 할 때도 너무 어려워서 책, 강의 등을 찾았다. 하지만 돌이켜보면 가장 중요한 것은 스프링 시큐리티 레퍼런스와 용어들, 그리고 흐름을 알면 되는 것이었다!
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) 기본 개념과 구조 파악