우리는 많은 서비스를 이용할 때 로그인을 합니다. 또한 로그인 상태가 유지되어야 합니다.
그렇다면 내가 입력한 패스워드는 어떻게 입력이 될 것인지, 스프링은 이러한 보안을 어떻게 관리하는지 알아봐요. 🔐🔐
먼저 보안 용어에 대한 이해를 키워봐요. 💪💪
인증/인가는 서비스를 이용하려는 사용자들을 검사기 위해 필요해요.
인증은 사용자가 누구인지 확인하는 것이고, 인가는 사용자의 권한에 대한 확인이에요.
인증(Authentication)
인증은 사용자가 누구인지 확인하는 절차로, 대표적으로 회원가입/로그인 요청이 있어요. 지하철을 탈 때 개찰구로 생각하셔도 돼요.
한번 로그인 요청에 대한 절차를 생각해봐요.
1. 아이디와 비밀번호를 입력
2. 위에서 입력한 아이디와 비밀번호가 DB에 등록되어있는지 확인
3. DB에 없거나 다르다면 실패, 있다면 성공과 함께 해당 사용자의 접근을 대신하는 토큰/세션 등 발급
4. 만료되지 않은 토큰/세션을 통해 로그인 인증 과정 생략
인가(Authorization)
인가는 앞서 설명한 인증을 통해 검증된 사용자의 요청이 접근할 수 있는 권리를 확인하는 과정이에요. 앞서 개찰구를 통해 들어가도 조종사실은 우리가 못들어가고 조종사만 들어가는 것처럼 말이죠.
세션/토큰을 받은 상태로 인가의 흐름을 생각해봐요.
1. 로그인 인증을 통해 세션/토큰이 생성된다. 해당 토큰/세션은 사용자의 정보를 가짐
2. 사용자가 리소스에 접근을 요청할 때, 토큰/세션을 포함하여 보냄
3. 서버는 토큰/세션을 통해 사용자의 접근 권한을 확인
4. 사용자 권한이 확인되면 요청을 실행
우리가 이미 익숙하게 사용하던 로그인 상태에서 무언가를 한다는 것은 선배개발자들이 고생한 덕이었다.. (존경!!)
반대로 말하면 이러한 기능이 없다는 것은 사용자가 불편을 느낄 것이라는 것!!!!
스프링 시큐리티는 스프링에서 애플리케이션 인증, 인가 등 보안 기능을 하는 프레임워크에요. 많은 기능을 제공하기 때문에 잘 알아보아요.
Spring의 프레임워크들의 좋은점은 공식홈페이지에서 설명을 해줘서 나무위키를 안가도 된다는점!!
스프링 공식 홈페이지 에서 읽어볼게요.
Spring Security is a powerful and highly customizable authentication and access-control framework. It is the de-facto standard for securing Spring-based applications.
Spring Security is a framework that focuses on providing both authentication and authorization to Java applications. Like all Spring projects, the real power of Spring Security is found in how easily it can be extended to meet custom requirements
Spring Security 은 자바 어플레케이션에 인증/인가를 제공하는 것을 중요하게 여긴다. Spring Security의 강력한 장점은 사용자 요구를 충족시키면서 확장할 수 있다는 것이다.
Spring Security is a framework that focuses on providing both authentication and authorization to Java applications. Like all Spring projects, the real power of Spring Security is found in how easily it can be extended to meet custom requirements
Spring Security는 커스텀이 용이한 강력한 인증/인가 프레임워크이고, 사실상 스프링 기반 애플리케이션에서 표준이다.
Features
Comprehensive and extensible support for both Authentication and Authorization
Protection against attacks like session fixation, clickjacking, cross site request forgery, etc
Servlet API integration
Optional integration with Spring Web MVC
Much more…
기능
- 인증/인가에 대한 종합적이며 확장 가능한 지원
- Session Fixation, Clickjacking, CSRF 등의 공격으로부터의 방어
- Servlet API 통합
- Spring Web MVC와의 선택적 통합
- 기타 등등
Spring Security의 또 하나의 장점은 인증/인가 로직을 다른 로직과 철저히 분리시킬 수 있다는 것이에요.
이는 당연히 객체지향의 장점처럼 확장에 용이하고 또한 Spring MVC와 관계없이 구축할 수 있어요.
다음편부터 더 자세한 Spring security를 알아보아요 👀
참고
https://www.okta.com/kr/identity-101/authentication-vs-authorization/
https://spring.io/projects/spring-security
스프링부트 핵심가이드