Spring Security를 처음으로 프로젝트에 적용해보았다. 몇년전 프로젝트를 하고있을때 Spring Seucrity를 프로젝트에서 적용하기 위해서  부단히도 노력했었던적이 있는데 그땐 책을 봐도 잘 몰랐었던거같은데, 새로운직장으로 이직을 하면서 적용해본 나름에 경험을 조금씩 남기고자 한다.  대부분의 기본적인 용어는 Spring Security3라는 책을 참조하였다.


https://spring.io/projects/spring-security#overview 예 서문에서는 아래와 같이 스프링 시큐리를 정의하고있다. 한마디로 얘기해서 

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를 커스터마이징 하는건 생각만큼 간단하지 않았었다는걸 경험으로 뼈저리게 느꼈었던거 같다. 물론 제대로 이해하지 못하고 적용하기위해서 온갖 삽질을 다해서 그럴지도 모른다.


기본개념 

  • 인증 (Authentication)
    • 인가된 사용자인지 확인하는 절차
    • 크리덴셜(Credential) 기반인증, 이중인증, 하드웨어 인증
  • 권한부여 (Authorization)
    • 인증된 주체에 권한을 확인하고 특정 기능 또는 데이터 접근을 허용하는 기능
  • 사용자 (Principal)
    • 보호된 대상에 접근하는 사용자 (User)
  • 비밀번호(Credential)
    • 사용자가 보호된 대상에 접근할 수 있는지 확인하기 위한것

스프링시큐리티는 인증된 주체를 고유하게 식별하는데 사용되는 자바 표준 보안 개념인 인증 (java.security.Principal)을 확장해서 사용한다. 전형적인 Principal에서는 시스템 사용자에 대한 1:1 매핑을 사용한다. Principal == 사용자 라고 보면된다.

권한부여라고 하면 두가지 작업을 아우르는데, 첫 번째 작업은 인증된 주체를 하나 이상의 권한 (역할)에 매핑하는 일이다. 예를 들어 웹 사이트를 단순 방문한 사용자는 방문자 권한을 부여받지만 웹 사이트 관리자는 관리자 권한을 부여받는다. 두 번째 작업은 보호된 리소스에 대한 권한 체크이다. 이러한 권한 체크는 주로 시스템이 개발될때 코드상에 명시적으로 선언하거나 설정 매개변수를 통해 이뤄진다. 예를 들어 온라인 애완 동물 상점의 재고를 관리하는 화면은 관리자 권한을 가진 사용자만 볼 수 있다.


보호된 리소스는 사용자의 권한에 따라 조건적으로 나타나야 하는 시스템 상의 모든 영역이 될 수 있다.

웹 어플리케이션에서 보호된 리소스는 개인 웹 페이지나 웹 사이트 전체 또는 개인페이지의 일부 영역이 될 수 있다. 이와 비교해 보면 보호된 비즈니스 리소스는 클래스에 대한 메서드 호출 또는 개별 비즈니스 객체가 될 수 있다.






블로그 이미지

클라인STR

,