본문 바로가기
카테고리 없음

230919 (화)

by 세크레투스 2023. 9. 19.
반응형
SMALL

<Spring Web Security>

 

<인증(Authentication)과 권한부여(Authorization - 인가)>

1. 인증

- 자신을 증명하는 것

- 자기 스스로가 무언가 자신을 증명할 만한 자료를 제시 (비밀번호)

2. 인가 (역할)

- 남에 의해서 자격이 부여됨

3. AuthenticationManager(인증 매니저)

- 인증 담당하며, 다양한 방식의 인증을 처리

4. ProviderManager

- 인증에 대한 처리를 AutheticationProvider라는 타입의 객첼ㄹ 이용해 처리

5. AuthenticationProvider(인증 제공자)

- 실제 인증 작업을 진행

- UserDetailService가 인증 정보에 관한에 대한 정보를 구성

---중간에 뭐 있는데 이따가 쓰자---

 

<접근 제한 설정>

‼️ 403에러 : 권한부족

- 에러 발생보다는 로그인 페이지로 리다이렉트 --> 로그인 설정

 

1. CSRF(Cross Site Request Forgery) 공격

- 인터넷 사용자(희생자)가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 만드는 공격

- POST 요청을 위조하여 전송하는 것

- 방어책

* CSRF 토큰 운영

** form 페이지 GET 요청시 form 내에 인증 토큰을 심어서 전송시

** 인증 토큰이 있는 경우에만 정당한 POST 요청으로 인식

** 해당 토큰이 없으면 에러를 발생시킴

- spring-security 사용시 디폴트로 사용하는 것으로 설정됨.

 

post delete, login -> session : browser 식별 (jsession ID가 있는지) -> jsession이 있다면 로그인한 사용자 판별 가능함.

form에 hidden으로 값을 넣어줌.

 

2. 접근 권한 설정 페이지 접근시

- 권한이 맞으면 요청한 페이지로 진입

- 권한이 맞지 않으면

* 로그인 하지 않은 경우 login 페이지로 이동 -> 로그인 이후 해당 페이지로 들어감

* 로그인 된 상태라면 403 에러 발생

 

3. 로그아웃 설정

- 로그아웃 시 해야 할 일

* 세션 무효화(invalidate)

* 쿠키 제거 : JSESSION-ID remember-me

* logout url을 post로 요청

 

<JSP에서 로그인 한 사용자 정보 보여주기>

1. spring security tag lib 사용

<%@ taglib uri="http://www.springframework.org/security/tags
    prefix="sec" %>

 

2. <sec:authentication>

- <sec:authentication property="principal"> // principal : 본인(주체)

* principal : UserDetailsService가 리턴한 객체 --> loadUserByUsername()에서 반환한 User 객체

* 로그인 사용자명 출력

<sec:authentication property="principal.username"/>

 

3. <sec:authorize access="">

- isAnonymous() : 로그인을 하지 않은 경우 true

- isAuthenticated() : 로그인을 한 경우 true

 

4. MemberMapper.xml에 추가해주기.

<id property="username" column="username" /> -> column이 username인 것은 하나로만 처리해라 라는 의미.

 

 그리고 이게 가장 중요함

<collection property="authList" resultMap="authMap" />

 

MemberVO.java에서 리스트로 처리해주는 부분

private List<AuthVO> authList; <- 다른 테이블에 대한 정보

를 authMap으로 resultMap에 넣어달라는 의미

 

collection - 리스트 처리하라는 의미.

property - 리스트 변수명.

resultMap -> 맵핑 규칭 -> authMap

username과 auth를 만들어라.

 

<username> <auth>

admin ROLE_ADMIN

admin ROLE_MANAGER

admin ROLE_USER

 

list에 3개가 담김.

==> AuthVO로 만들어짐.

 

원래 보안이 실제 서비스를 만들 때 가장 먼저 이뤄져야 할 부분임.

 

 

반응형
LIST