쌩로그

인가 API - 권한 설정 및 표현식 본문

Spring/Spring Security

인가 API - 권한 설정 및 표현식

.쌩수. 2023. 5. 17. 08:22
반응형

나는 어차피 잘 될 사람이다.

어차피 잘 될 것이고, 지금도 잘 되고있고, 과거도 잘 되어왔기에,,,


목차

  1. 개요
  2. 본론
      2-1. URL별 접근 권한 설정
      2-2. 인가 API 표현식
  3. 요약
  4. 끝.

1. 개요

제곧내 인가 즉, 권한 설정의 API와 그와 관련된 표현식에 관한 포스팅이다.
해당 내용은 나의 시큐리티 학습 레포에 있다.

먼저 권한 설정 방식에는 두가지 방식이 있다.
선언적 방식동적 방식(DB를 연동한 방식)이다. 그리고 각 방식 마다 URL 혹은 메서드로 설정할 수 있다.
간략히 하면 아래와 같다.

  • 선언적 방식
    • URL
    • Method
  • 동적 방식 - DB 연동 프로그래밍
    • URL
    • Method

이 중, 선언적 방식 중 URL방식에 대한 내용이다.

2. 본론

2-1. URL별 접근 권한 설정

해당 방식은 configure메서드Overrideconfigure(HttpSecurity http) 메서드에서 설정할 수 있다.

  참고로, 지금은 WebSecurityConfigurerAdapter가 Deprecated됨;;

antMatcher("URL경로")로 보통 전체경로를 설정해준다.
authorizeRequests()를 선언한 이후, .antMatcher("URL경로")methodChain형식으로 URL 경로를 설정해준다.
그리고 antMatcher("URL경로")를 선언하고, `.허용된 권한을 설정해준다.(예 permitAll(), hasRole("ADMIN")... 등)

아래 코드를 참고하면 될 거 같다.

Ex)

http
    .antMatcher("URL경로")
    .authorizeRequests()
    .antMatcher("URL경로").hasRole("ADMIN")  // 해당 경로에는 ADMIN권한을 가진 계정만 접근가능
    .antMatcher("URL경로").permitAll();  // 모든 권한을 가진 계정 접근가능.

❗주의 사항

  • 구체적인 경로를 먼저 설정해주고, 밑으로 갈수록 범위가 넓어져야 한다.
  • 범위가 넓은 것을 우선 설정하고, 구체적인 경로를 이후로 선언할 때 발생하는 문제좁은 범위로 설정 된 경로로 권한을 체크하기 전에 넓은 범위의 경로에서 필터링되므로, 좁은 범위의 경로로 체킹되기 전에 넓은 범위에서 이미 허용된 권한으로 체킹되므로 특정 경로에 특정 권한만 접근가능하도록 설정했지만, 무용지물이 되기 때문이다.

예를 들면,
아래와 같이 permitAll() 로 모든 경로를 설정한 이후, ADMIN만 허용가능한 특정 경로를 설정했다고 가정했을때,

authorizeRequests()
    .antMatcher("/shop/**).permitAll()
    .antMatcher("/shop/admin).hasRole("ADMIN")

ADMIN의 권한이 아닌 유저라도 .antMatcher("/shop/**).permitAll()에 체킹되서 /shop/admin에 접근이 가능하다는 것이다.

2-2. 인가 API 표현식

메소드 동작
authenticated() 인증된 사용자의 접근을 허용
fullyAuthenticated() 인증된 사요자의 접근을 허용, rememberMe 인증 제외
permitAll() 무조건 접근을 허용
denyAll() 무조건 접근을 허용하지 않음
anonymous() 익명 사용자의 접근을 허용, 단 USER는 접근을 못함. permitAll()로 설정하는 것이 더 나은 선택
rememberMe() 기억하기를 통해 인증된 사용자의 접근을 허용
access(String) 주어진 SpEL 표현식의 평가 결과가 true이면 접근을 허용
hasRole(String) 사용자가 주어진 역할(USER ,ADMIN)이 있다면 접근을 허용
hasAuthority(String) 사용자가 주어진 권한(ROLE_USER, ROLE_ADMIN)이 있다면 접근을 허용
hasAnyRole(String...) 사용자가 주어진 권한 중 어떤 것이라도 있다면 접근을 허용
hasAnyAuthority(String...) 사용자가 주어진 권한 중 어떤 것이라도 있다면 접근을 허용
hasIpAddress(String) 주어진 IP로부터 요청이 왔다면 접근을 허용

3. 요약

권한 설정 방식에는 두가지 방식 선언적 방식동적 방식이 있다.
두 방식에는 각각 URL방식메서드방식이 있는데, 그 중 선언적 방식-URL방식을 알아보았다.

그리고, 인가 API 표현식에 대한 내용도 참고해보았다.


4. 끝

끝.

728x90
Comments