본문 바로가기

카테고리 없음

[Spring Boot] Security6 권한(Authority)과 역할(Role)의 차이

 

 

 

권한(Authority)

  • 정의: 권한은 사용자가 가질 수 있는 개별 특권이나 웹 애플리케이션 내에서 사용자가 수행할 수 있는 개별 작업을 나타냅니다.
  • 예시: VIEWACCOUNT, VIEWCARDS, VIEWLOANS 등. 이 권한들을 통해 사용자는 특정 작업을 수행할 수 있습니다.
  • 세밀한 접근 제한: 권한은 개별 작업이나 특권을 나타내므로, 세밀한 방식으로 접근을 제한하는 데 사용됩니다. 예를 들어, 사용자가 특정 계정 정보를 보기 위해서는 VIEWACCOUNT 권한이 필요합니다.

역할(Role)

  • 정의: 역할은 여러 권한의 그룹을 나타냅니다. 즉, 하나의 역할은 여러 권한을 포함할 수 있습니다.
  • 예시: ROLE_ADMIN, ROLE_USER 등. 이러한 역할은 여러 권한을 묶어서 한 번에 부여할 수 있습니다.
  • 대략적인 접근 제한: 역할을 사용하면 여러 권한을 하나로 묶어 관리할 수 있으므로, 권한을 세밀하게 관리하지 않고도 대략적인 접근 제한을 설정할 수 있습니다. 예를 들어, ROLE_ADMIN은 VIEWACCOUNT, EDITACCOUNT, DELETEACCOUNT와 같은 여러 권한을 포함할 수 있습니다.

 

  • spring Security에서는 역할 이름에 ROLE_ 접두사를 붙이는 것이 관례입니다. 예를 들어, "ADMIN" 역할은 "ROLE_ADMIN"으로 저장됩니다. 이는 역할과 권한을 구분하기 위한 표준입니다.
  • 역할의 접두사: Spring Security는 역할을 나타내는 문자열에 ROLE_ 접두사를 사용합니다. 예를 들어, "ADMIN" 역할은 내부적으로 "ROLE_ADMIN"으로 처리됩니다.
  • 메소드 사용 시 접두사 생략: hasRole(), hasAnyRole(), access() 메소드를 사용할 때는 역할 이름에 ROLE_ 접두사를 붙일 필요가 없습니다. Spring Security가 내부적으로 자동으로 이 접두사를 추가해줍니다.
// 역할 부여 예제에서 'ROLE_ADMIN' 역할을 사용자에게 부여
List<GrantedAuthority> authorities = new ArrayList<>();
authorities.add(new SimpleGrantedAuthority("ROLE_ADMIN"));
return new User(user.getUser_email(), user.getUser_password(), authorities);
// hasRole() 메소드 사용 예제
http
    .authorizeRequests()
    .antMatchers("/admin/**").hasRole("ADMIN")
    .antMatchers("/user/**").hasAnyRole("USER", "ADMIN")
    .antMatchers("/", "/home").permitAll()
    .anyRequest().authenticated()
    .and()
    .formLogin()
    .loginPage("/login")
    .permitAll()
    .and()
    .logout()
    .permitAll();

 

Spring Security에서의 권한과 역할

  • 권한 및 역할 이름의 표준: Spring Security에서는 특정 문자열이 권한인지 역할인지를 구별하기 위해 표준을 강제하고 있습니다. 역할은 항상 ROLE_ 접두사로 시작해야 합니다. 예를 들어, ROLE_ADMIN은 역할을 나타내고, VIEWACCOUNT는 권한을 나타냅니다.
  • GrantedAuthority 인터페이스: Spring Security에서 권한과 역할은 GrantedAuthority 인터페이스를 사용하여 표현됩니다. SimpleGrantedAuthority 클래스는 이 인터페이스의 간단한 구현체로, 권한과 역할을 문자열로 감싸서 처리합니다.

권한과 역할의 사용 예시

  • 데이터베이스 관리: 권한을 관리하기 위해 데이터베이스에서 AUTHORITIES 테이블을 사용할 수 있습니다. 이 테이블에 ROLE_USER와 ROLE_ADMIN 같은 역할을 저장하고, 이를 사용자에게 부여할 수 있습니다.
  • 권한 부여: 사용자의 권한을 부여할 때는, 사용자에게 필요한 권한 또는 역할을 GrantedAuthority 리스트에 추가하고, 이를 UserDetails 객체로 반환하여 Spring Security에서 사용합니다.