티스토리 뷰
보안 정책 설정하는 법
1. 자원 및 권한 설정
- 마이페이지
자원 설정 - /mypage
권한 매핑 - ROLE_USER
- 메시지
자원 설정 - /message
권한 매핑 - ROLE_MANAGER
- 환경설정
자원 설정 - /config
권한 매핑 - ROLE_ADMIN
- 관리자
자원 설정 - /admin/**
권한 매핑 - ROLE_ADMIN
2. 사용자 등록 및 권한부여
3. 권한계층적용
ROLE_ADMIN > ROLE_MANAGER > ROLE_USER
4. 메소드 보안 설정
메소드 보안 - 서비스 계층 메소드 접근 제어
io.security.corespringsecurity.aopsecurity.AopMethodService.methodSecured
포인트컷 보안 - 포인트컷 표현식에 따른 메소드 접근 제어
execution(public * io.security.corespringsecurity.aopsecurity.*Service.pointcut*(..))
5. IP제한하기
리소스관리 - 인가처리 (각 자원에 해당하는 권한)
매핑된 데이터가 DB에 저장되며, 인가처리가 DB와 연동되서 스프링시큐리티가 처리를 하게 된다.
각각의 메뉴에 접근할 수 있는 사용자를 등록하도록 한다.
user계정, manager계정을 만든다.
총 3명의 사용자가 있다. admin, user, manager
기본적으로 회원가입시 ROLE_USER라는 권한으로 부여가 되며, manager에게는 ROLE_MANAGER권한을 부여할것이다.
먼저 user계정으로 로그인하게 되면, user는 ROLE_USER라는 권한을 가지고 있기 때문에, 마이페이지 에 접근이 가능하다. 마이페이지는 ROLE_USER 권한으로 자원이 매핑되어있기 때문이다.
메시지에는 접근이 되지 않는다. 메시지는 ROLE_MANAGER 권한으로 자원이 매핑되어있기 때문에, ROLE_MANAGER라는 권한을 가진 사용자가 접근이 가능하다.
manager로 인증을 하고 메시지에 접근을 하면 접근이 가능하다. 하지만 마이페이지나 환경설정에는 접근할 수 없다.
admin인으로 인증을 한 상태에서 환경설정은 ROLE_ADMIN 권한과 매핑이 되어있기 때문에 접근 이 가능하지만, 마이페이지나 메시지에는 접근이 되지 않는다.
ROLE_ADMIN 권한을 가진 사용자(admin)가 마이페이지나 메시지에 접근이 가능하려고 하면
사용자관리탭에 가서 admin 계정 권한에 ROLE_MANAGER, ROLE_USER 이렇게 권한을 모두 부여해야 각각의 자원에 접근이 가능하게 된다.
인증처리와 각각의 자원에 접근이 될 수 있도록 처리하는 인가처리 모두가 스프링 시큐리티에서 데이터베이스와 연동해서 처리가 되고 있다.
우리가 이렇게 admin계정에 각각의 권한들을 모두(ROLE_ADMIN, ROLE_MANAGER, ROLE_USER) 부여를 하면,
각각의 권한에 매핑된 자원에 접근이 가능하지만
예를들어, ROLE_ADMIN권한만 부여를 하더라도 ROLE_MANAGER, ROLE_USER 권한과 매핑된 자원에도 접근이 가능하도록 처리를 해보도록 할 것이다.
=> 권한계층 적용 (ROLE_ADMIN > ROLE_MANAGER > ROLE_USER) - 이렇게 RoleHierarchy와 같은 개념으로 구성하게 되면, ROLE_ADMIN 권한을 가진 사용자는 ROLE_MANAGER, ROLE_USER 권한과 매핑된 자원이도 접근이 가능하게 된다.
admin 은 manager, user 의 권한과 매핑된 자원 모두에게 접근 가능.
manager는 user의 권한과 매핑된 자원에도 접근 가능.
IP제한하기
허가된 ip만 접근 가능하도록 설정을 했다. 내 아이피가 아닌 다른 ip로 접근하면 어떤 자원에도 접근이 되지 않는다.
권한매핑이 된 자원에는 접근이 되지 않으며, 아무 매핑이 되지 않은 자원에만 접근이 가능하다.
ip어드레스도 ip클래스를 추가해 데이터베이스와 연동되서 인가처리가 되고있다.
메소드보안?
가령 현재 client가 어떤 자원을 요청하게 되면 그 자원에 접속이 된 상태에서 메서드보안은 해당 서비스의 메소드를 호출해서 이 메서드 안으로 접근이 가능한지 가능하지 않은지 그 인가처리를 하는 것을 말한다.
지금은 인증을 받지 않아도 메소드보안에 접근이 가능하다. 이것을 변경해보도록 하려면
리소스 관리에 가서 리소스명에 패키지 이름+클래스이름+메서드 까지 해서 리소스명을 적어주고
리소스타입은 method 이고,
이 메서드 안으로 접근하기 위해서는 ROLE_USER 권한을 가진 사용자가 접근 가능하도록 매핑을 해서 설정하도록 한다.
메소드 보안도 실시간적으로 DB와 연동해서 인가처리가 되고 있다.
메소드(소스코드) 에서는 어떠한 권한도, 설정도 되어있지 않고 있고, 모든 인가, 보안처리는 그 정보를 저장하고 저장된 정보를 읽어 그 데이터를 가지고 Spring security가 인가처리를 해준다.
포인트컷 보안은 포인트컷 표현식을 사용해 메서드 위에서 메서드 보안 세팅을 할 수 있도록 처리를 하는 것이다.
포인트컷 표현식 자원을 리소스에 등록한다. 타입은 pointcut이고
리소스명을 보면 해당패키지+클래스가 가지고 있는 메서드 들 중 pointcut으로 시작하는 모든 메서드에는 인가처리가 될 수 있도록 (ROLE_ADMIN) 권한을 가진 사용자만 접근 할 수 있도록 설정을 한다.
인증처리 시스템을 가지고 있고 각각의 사용자를 등록하고 관리자시스템에서 그 사용자들에게 각각의 권한을 설정하게 되고, 각 자원에 설정된 그 자원에 접근하기 위해서는 해당 자원에 설정된 권한을 가진사용자만 접근 가능하도록 하였고,
admin권한을 가진 사용자가 roleHierachy 기능이 활성화 되면 그 하위레벨에 있는 권한이 접근할수 있는 자원에도 접근이 가능한 기능도 확인하였다.
메서드보안과 포인트컷 보안은 직접 관리자시스템에서 그 자원을 등록하고, 서비스계층에 해당 메서드에 접근이 가능한지/가능하지 않은지 그 처리과정을 처리해보았다.
메서드보안은 일반적으로 aop기반으로 동작하고, url방식의 자원접근은 filter기반으로 인가처리가 이루어진다.
인가처리와 인증처리 모든 시스템이 외부와 DB와 연동하여 동적인 인증처리와 동적인 인가처리가 이루어지도록 구성하여볼 것이다.
'ALL > Spring' 카테고리의 다른 글
[Book] 코드로 배우는 스프링 웹 프로젝트 (1) (0) | 2023.02.06 |
---|---|
[Spring] 스프링 시큐리티 Spring security (2) (0) | 2023.01.01 |
RedirectAttributes : redirect시 데이터를 전달할 수 있는 방법 (0) | 2022.12.14 |
스프링의 정석 Spring ch2 (0) | 2022.08.02 |
스프링의 정석 Spring ch1 (0) | 2022.08.02 |
- Total
- Today
- Yesterday
- 인덱스
- security
- MySQL
- @Configuration
- node
- 남궁성
- 스프링 프로젝트
- di
- 한입크기로 잘라먹는 리액트
- 객체지향
- 데브캠프
- spring
- React
- 자바의정석
- JavaScript
- EC2
- 컨테이너
- 친절한SQL튜닝
- Node.js
- 시큐리티
- 코드로 배우는 스프링 웹 프로젝트
- 리액트
- Spark
- 자바스크립트
- 스프링 빈
- 데이터베이스
- 스프링의정석
- 이정환
- 스프링
- AWS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |