Spring/security

[시큐리티] 권한과 역할제어

라임온조 2023. 3. 21. 12:15

1. 권한 부여

1) 개념

식별된 클라이언트가 요청된 리소스에 엑세스할 권한이 있는지 시스템이 결정하는 프로세스

2) 특징

  • 인증 흐름을 완료한 후 요청을 권한 부여 필터에 위임하고, 필터는 구성된 권한 부여 규칙에 따라 요청을 허용하거나 거부함. 즉, 항상 인증 이후에 수행됨
  • 인증 프로세스 도중 UserDetailsService는 사용자의 권한을 포함한 모든 세부 정보를 얻음. 애플리케이션은 사용자를 성공적으로 인증한 후 GrantedAuthority 인터페이스로 나타내는 권한으로 권한 부여를 수행함

3) 과정

 

2. GrantedAuthority

1) 개념

사용자가 수행할 수 있는 작업을 GrantedAuthority 인터페이스로 나타냄

2) 특징

UserDetails는 GrantedAuthority 인스턴스의 컬렉션을 가짐

GrantedAuthority 객체의 getAuthority() 메서드의 실행으로 권한의 이름을 얻을 수 있음

3) 인터페이스 코드

public interface GrantedAuthority extends Serializable{
	String getAuthority();
}

 

3. 권한에 따른 접근 제한 방법

1) hasAuthority()

  • 하나의 권한만 매개 변수로 받음
  • 해당 권한이 있는 사용자만 엔드포인트를 호출할 수 있음

2) hasAnyAuthority()

  • 여러 개의 권한을 매개 변수로 받음
  • 여러 개 권한 중 하나의 권한만 있더라도 사용자는 엔드포인트를 호출할 수 있음

3) access()

  • 권한 부여 조건을 나타내는 스프링 식을 매개 변수로 받음
  • 코드를 읽고 디버그하기 어려움
  • 위의 두 메서드 사용이 불가한 경우에만 사용하는 것이 바람직함

4. 역할에 따른 접근 제한 방법

1) hasRole()

  • 하나의 역할만 매개 변수로 받음
  • 해당 역할의 사용자만 엔드포인트를 호출할 수 있음

2) hasAnyRole()

  • 여러 개의 역할을 매개 변수로 받음
  • 여러 개 중 하나만 가지고 있어도 사용자는 엔드포인트를 호출할 수 있음

3) access()

  • 역할 부여 조건을 나타내는 스프링 식을 매개 변수로 받음
  • 코드를 읽고 디버그하기 어려움
  • 위의 두 메서드 사용이 불가한 경우에만 사용하는 것이 바람직함

5. 맞춤형 권한 부여

1) 개념

비즈니스 요구 사항에 따라 특정한 요청 그룹에만 권한 부여 제약 조건을 적용하는 것

 2) 특징

권한 부여 구성을 적용할 요청을 선택할 때 선택기 메서드를 사용함

3) 선택기 메서드

권한 부여 구성을 적용할 요청을 선택할 때 사용하는 메서드

 

6. 선택기 메서드 중 MVC 선택기

1) 특징

  • 권한 부여 구성을 적용할 요청을 지정하는 일반적인 방법
  • 표준 MVC 구문으로 경로를 지정
  • /hello 와 /hello/를 동일하게 인식해서 같은 규칙으로 보호해서 스프링의 경로 및 작업 매핑과 관련한 몇 가지 위험을 예방할 수 있음

2) 메서드

mvcMatchers(HttpMethod method, String... patterns)

  • 제한을 적용할 HTTP 방식과 경로를 모두 지정
  • 같은 경로에 대해 HTTP 방식별로 다른 제한을 적용할 때 유용

mvcMatchers(String... patterns)

  • 경로만을 기준으로 권한 부여 제한을 적용할 때 쉽고 간단하게 이용 가능
  • 자동으로 해당 경로의 모든 HTTP 방식에 제한이 적용됨

3) MVC 선택기 경로 일치에 이용되는 일반적인 식

설명
/a /a 경로만
/a/* 한 경로 이름만 대체함. /a/b는 일치하지만 /a/b/c는 일치하지 않음
/a/** 여러 경로 이름을 대체함. /a, /a/b, /a/b/c 모두 일치
/a/{param} 주어진 경로 매개 변수를 포함한 /a 경로에 적용
/a/{param:regex} 매개 변수 값과 주어진 정규식이 일치할 때만 주어진 경로 매개 변수를 포함한 /a 경로에 적용됨

 

7. 선택기 메서드 중 앤트 선택기

1) 특징

  • /hello 와 /hello/를 동일하게 인식하지 않아서 권한 부여 규칙을 적용할 모든 경로에 확실하게 적용되게 식을 작성해야 함
  • 되도록이면 mvc 선택기를 사용하는 것이 좋음

2)  메서드

antMatchers(HttpMethod method, String patterns)

  • 제한을 적용할 HTTP 방식과 경로를 참조할 앤트 패턴을 모두 지정할 수 있음
  • 같은 경로 그룹에 대해 HTTP 방식별로 다른 제한을 적용할 때 유용

antMatchers(String patterns)

  • 경로만을 기준으로 권한 부여 제한을 적용할 때 더 쉽고 간단하게 이용할 수 있음
  • 모든 HTTP 방식에 자동으로 제한이 적용

antMatchers(HttpMethod method)

  • 경로와 관계없이 특정 HTTP 방식을 지정

 

8. 선택기 메서드 중 정규식

1) 특징

앤트와 MVC 식으로는 해결할 수 없는 특정한 요구사항(특정한 기호나 문자 있으면 요청 거부)에 종종 사용

2) 메서드

regesMatchers(HttpMethod method, String reges)

  • 제한을 적용할 HTTP 방식과 경로를 참조할 정규식을 모두 지정
  • 같은 경로 그룹에 대해 HTTP 방식별로 다른 제한을 적용할 때 유용

regexMatchers(String regex)

  • 경로만을 기준으로 권한 부여 제한을 적용할 때 더 쉽고 간단하게 이용할 수 있음
  • 모든 HTTP 방식에 자동으로 제한이 적용

'Spring > security' 카테고리의 다른 글

[시큐리티] CSRF  (0) 2023.03.27
[시큐리티] 필터  (0) 2023.03.23
[시큐리티] SecurityContext  (0) 2023.03.16
[시큐리티] AuthenticationProvider  (0) 2023.03.15
[시큐리티] PasswordEncoder  (0) 2023.03.15