티스토리 뷰

Spring

Spring Security - Method Security

사용자 엔꾸꾸 2019. 10. 12. 23:25

Spring Security - Method Security

  • SpringSecurity는 Web기반의 Security 외에 Method Security 기능을 제공한다.
  • 서비스 계층을 직접 호출할때 사용할 수 있는 보안 기능이다.
  • Web기반의 Security를 적용했을때는 어울리지 않는 기능이다.
  • Web 애플리케이션 이 외에도 데스크탑 애플리케이션 사용시 적용이 가능하다.

 

@EnableGlobalMethodSecurity

  • MethodSecurity는 우리가 기존에 사용했던 SecurityConfig 설정이 적용되지 않는다.
  • MethodSecurity용 설정이 따로 필요한데 이때 사용하는것이 @EnableGlobalMethodSecurity이다.

 

@EnableGlobalMethodSecurity 의 속성들

  • securedEnabled, prePostEnabled, jsr250Enabled 3개의 옵션이 존재한다.
  • 이름만 봤을때 어떠한 설정을 활성화 시키는 옵션이라는 느낌을 준다.

1.securedEnabled

  • @Secured 애노테이션을 사용하여 인가 처리를 하고 싶을때 사용하는 옵션이다.
  • 기본값은 false

2.prePostEnabled

  • @PreAuthorize, @PostAuthorize 애노테이션을 사용하여 인가 처리를 하고 싶을때 사용하는 옵션이다.
  • 기본값은 false

3.jsr250Enabled

  • @RolesAllowed 애노테이션을 사용하여 인가 처리를 하고 싶을때 사용하는 옵션이다.
  • 기본값은 false

 

@Secured, @RolesAllowed

  • 특정 메서드 호출 이전에 권한을 확인한다.
  • SpEL 지원하지 않는다.
  • @Secured 는 스프링에서 지원하는 애노테이션이며, @RolesAllowed는 자바 표준

 

@PreAuthorize, @PostAuthorize

  • 특정 메서드 호출 전, 후 이전에 권한을 확인한다.
  • SpEL을 지원한다.
  • 스프링에서 지원하는 애노테이션이다.
  • PostAuthorize는 해당 메서드의 리턴값을 returnObject 로 참조하여 SpEL을 통해 인가 처리를 할 수 있다.

 

MethodSecurity의 RoleHierachy

  • 우리가 Web에서 Role의 계층구조 설정을 해주었지만 MethodSecurity에서는 적용 되지 않는다.
  • MethodSecurity용 RoleHierachy 설정을 따로 해주어야한다.
  • 먼저 GlobalMethodSecurityConfiguration 클래스를 상속받아 accessDecisionManager method를 Overried 한다.
  • 다음으로 WebSecurity 설정에서 해준것과 마찬가지로 RoleHierarachy를 설정한뒤 accessDicisionVoter에 추가해준다.

 

정리

  • Spring Security에서는 특정 메서드에 권한 처리를 하는 MethodSecurity 기능을 제공한다.
  • MethodSecurity는 WebSecurity와는 별개로 동작하기 때문에 추가적인 설정이 필요하다.
  • 주로 데스크탑 애플리케이션에서 사용한다.

 

참조

댓글
  • 프로필사진 시큐리티어렵다 안녕하세요! Method Security 의
    Web기반의 Security를 적용했을때는 어울리지 않는 기능이다.
    이 부분을 좀 더 설명해주실수 있을까요?

    이부분에 대해서 더 알아보고싶어서 알아봤는데 stackoverflow 에 web applicaion 에서 url 과 method level에서의 보안을 모두 적용해야하나 에대한 글이 있어서 보니까

    spring 에서도 다양한 클라이언트를 적용하기 위해서, 좀 더 보안적용을 구체화하기 위해 등의 이유로
    둘 다 적용하도록 권장한다고 나와있더라구요! 혹시 제가 방향을 잘못 잡고 찾아본 걸 까요?

    해당 링크를 우선 남기겠습니다!
    https://stackoverflow.com/questions/53358424/controller-web-request-antmatcher-security-vs-methodservice-level-security
    https://stackoverflow.com/questions/10826362/spring-security-method-secure-and-url-secure

    설명해주시면 감사하겠습니다!
    2021.02.04 03:02
  • 프로필사진 엔꾸꾸 안녕하세요
    기존의 웹 시큐리티는 '웹' 에 초점을 맞추어 나온 기능이기 때문에 Method Security 와 비교했을때 Method Security 만으로는 웹의 보안처리를 하기엔 제약사항이 많아 '웹 기반의 시큐리티를 적용했을때에는 어울리지 않는 기능이다' 라고 소개드렸어요 ~
    Method Security 기능 자체는 애초에 웹기반 애플리케이션 보다는 데스크탑 애플리케이션 (a.k.a swing) 을 위해 나온것이라 웹 기반 애플리케이션 에는 어울리지 않는 기능이라고 생각합니다.
    이 또한 '단일' 로 적용했을때 얘기이고 일반적으로 두가지 모두 적용해서 사용하는것으로 알고있습니다.
    도움이 되셨으면 좋겠네요 ~
    2021.02.08 22:41
  • 프로필사진 시큐리티진짜어렵네 스프링시큐리티가 스프링프레임워크에 의존성을 피하도록 설계가 되었다고 들은적이 있는데
    (그래서 필터 기반으로 설계되었다고..)
    method security또한 같은 맥락이라 생각했습니다.

    method security가 웹 기반 애플레케이션을 위해 나온 기능은 아니지만,
    뭔가 '어울리지 않는 기능' 이라는 말보단
    '클라이언트에 의존성을 없애기 위한 기능' 이라고 생각이 계속 드는데 어떻게 생각하시나요?:>

    깊게 알지 못해 밑천이 보일까봐 부끄럽지만..대댓글 달아봅니다
    2021.02.12 03:51
  • 프로필사진 엔꾸꾸 스프링 시큐리티가 '특정 웹기술에 의존되지 않도록 설계되었다.' 는 얘기는 들은적이 있는데, '스프링 프레임워크의 의존성을 피하기 위해 필터기반으로 설계되었다.' 는 말은 저는 처음 듣는것 같아요 ~
    필터 기반이지만, 결국에는 DelegatingFilterProxy 가 스프링 컨테이너에 등록된 빈 (시큐리티 필터) 에게 위임을 하는구조라 .. 스프링 의존성을 피하기 위해 필터 기반으로 설계 되었다 ? 는 좀 아이러니 한것 같아요.
    관련 링크 공유해주시면 좋을것 같습니다 ~

    Spring Security Method Security 가 '클라이언트에 의존성을 없애기 위한 기능' 이라는 의견을 주셨는데, 저는 오히려 반대로 생각하는데요.

    오히려 저런 애노테이션 기반의 기능은 특정 기술에 강하게 종속되는 기능이라고 생각해요.
    물론 스프링 시큐리티에서 제공하는 애노테이션 외에도 JSR-250 과 같은 표준 애노테이션을 지원 하지만, 표준 스펙 이다 보니 스프링에서 제공하는 다양한 기능을 제대로 활용하기 힘든것은 사실이구요.

    애노테이션 기반의 기능들은 겉으로 보기엔 좋고 편리해보이지만, 단점도 분명하고 특정 기술에 종속적인 구조가 되는 경우가 많아 피할수 있으면 피하되, 최소한으로 적용하는것이 좋다고 생각합니다 ~

    이런 문제를 스프링에서도 인지하고, 예전부터 '스프링이지만, 스프링에 의존적인 기능들을 줄이기' 위해 많은 노력 하고있습니다. 가장 단적인 예로는 4.3 버전부터 지원하게된 생성자 주입시 @Autowired 생략과 같은 기능이지요.
    주절주절 얘기하다 딴데로 세긴했는데, 혹시 도움이 되셨을까요 ?

    2021.02.12 07:47
  • 프로필사진 시큐리티하드 Spring Security integrates with the Servlet Container by using a standard Servlet Filter. This means it works with any application that runs in a Servlet Container. More concretely, you do not need to use Spring in your Servlet-based application to take advantage of Spring Security.

    https://docs.spring.io/spring-security/site/docs/5.4.2/reference/html5/#servlet-applications

    이 부분을 보고 제가 그렇게 생각하고 있었던 것 같네요 :)

    제가 약간 말을 잘못한 것 같네요.
    method security를 쓰는것이
    '스프링에 의존성을 피하기 위해서 쓴다' 라는 말이아니였는데 그렇게 이해하신 걸까요?

    엔꾸꾸님이 말씀하신 애너테이션 기반이 기술에 종속되는 기능이다 는 동의합니다!

    글을 쓰면서 정리가 되어서 다시 질문을 드리고싶은데

    원서에 나와있는 글을 보면
    From version 2.0 onwards Spring Security has improved support substantially for adding security to your service layer methods

    '서비스 레이어의 보안을 향상시켰다' 라고만 나와있고
    '서비스 레이어의 보안을 향상시킨다는 것이 목적인 것 같은데 왜 웹기술과는 어울리지 않다고 하신거지?' 라는 의문이 들었습니다.



    In practice we recommend that you use method security at your service layer, to control access to your application, and do not rely entirely on the use of security constraints defined at the web-application level. URLs change and it is difficult to take account of all the possible URLs that an application might support and how requests might be manipulated. You should try and restrict yourself to using a few simple ant paths which are simple to understand. Always try to use a "deny-by-default" approach where you have a catch-all wildcard ( / or ) defined last and denying access.

    https://docs.spring.io/spring-security/site/docs/5.4.2/reference/html5/#servlet-httpfirewall

    원서를 보면 웹 어플리케이션 레벨에서 정의한 제약에 의존하지 말고 더 나아가 method security를 적용해라 라는 말이 있어서 이런 부분을 봤을 때
    method security가 정말 웹과 어울리지 않는 기능이 맞나? 라고 생각이 들었습니다!

    저는 원서를 읽고 stackoverflow를 찾아보고 나서
    method security는 웹기반에 의존하지 않는 기능같다고 생각이 들었거든요!..

    이게 이렇게까지 토론할 주제가 맞나 싶긴하지만 이렇게 의견나누는게 재미있어서 좀 더 이야기해보고싶네요!
    2021.02.12 22:19
  • 프로필사진 엔꾸꾸 글쎄요... 위에 했던말 다시하게 되는것 같은데, 스프링시큐리티가 스프링프레임워크에 의존성을 피하도록 설계가 되었다. 그래서 필터기반으로 설계되었고, Method Security 가 비슷한 맥락이라고 생각 했다.
    라는 말씀을 하셔서 좀 의아 했거든요 ~

    Method Security 가 웹 기능과 어울리지 않는 기능이라고 표현한 이유는 이전 댓글에 충분히 말씀드렸다고 생각합니다.
    Method Security 는, 보신 글에도 나온것처럼 Web Security 와 상호보완적으로 사용해서 하라는 의미이지, Method Security 하나만 놓고 봤을땐 웹의 다양한 보안처리를 하기엔 제약 사항이 많습니다.
    상호보완적으로 사용할수 있다고해서 '웹 기술과 어울린다' 고 보긴 힘듭니다.

    아직 공부중인 학생이신것 같은데 열심히 공부하셔서 정진하시길 바랍니다.
    이만 마치겠습니다 ~
    2021.02.13 00:13
댓글쓰기 폼
공지사항
Total
75,653
Today
169
Yesterday
201
링크
TAG
more
«   2021/12   »
      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 31  
글 보관함