이 강의에서는
권한(Authority)과 역할(Role) 사이의
차이에 대해 살펴보겠습니다
권한은 사용자가 가질 수 있는 개별 특권이나
웹 애플리케이션 내에서 엔드 유저가
수행할 수 있는
개별 작업을 나타냅니다
VIEWACCOUNT, VIEWCARDS, VIEWLOANS와 같은
권한의 이름을 살펴봅시다
이 권한들을 사용하여
사용자는 오직 계정, 카드 또는 대출 세부 정보 등을 살펴보기와 같은
한 가지의 액션만
취할 수 있습니다
이러한 권한은 개별 권한이나 개별 작업을 나타내므로
세밀한 방식으로
액세스를 제한하는 것에
사용할 수 있습니다
반면에 역할은 여러 권한의 그룹을 나타냅니다
가끔 많은 기업 웹 애플리케이션에서는
비즈니스 애플리케이션이 지원할 수 있는
수천 개의 작업이 있기도 합니다
여기서 우리는 단지 넷 혹은 다섯 개의 REST APIs를 가지지만
실제로는 몇 백 개의 서비스들이 존재하고
각 서비스는
거기에 상응하는 권한을 가지고 있을 것입니다
따라서 이런 상황에서는 권한을 다루고 작업하는 것이
매우 복잡할 것입니다
이것이 바로 우리가 이러한 권한을 역할로서 묶을 수 있는 이유입니다
따라서 여기서 할 수 있는 것은
웹 애플리케이션 내에
너무 많은 권한을 생성하는 것 대신에
제 유저가 이러한 활동을 수행할 수 있다고 가정하고
제 관리자는 이러한 활동을 수행할 수 있다고 가정할 수 있으며
이에 따라 웹 애플리케이션 내에서
특정 역할을 생성할 수 있습니다
따라서 역할은 일반적으로
권한이나 작업의 그룹을 나타냅니다
역할을 도움을 통해
인가를 강제하는 것은
접근을 듬성 듬성
제한하고 있음을 의미합니다
세밀한 관리는
VIEWACCOUNT, VIEWCARDS와 같은 REST API 작업 수준의
아주 작은 세부 정보로 이동하는 것이며
대략적인 권한은
아주 상세하게까지는 이동하지 않는 것입니다
고수준에서는 일부 역할을 생성하고
해당 역할을 사용하여
권한을 강제하게 됩니다
그리고 이러한 권한은 Spring Security에서
특정한 역할을 나타내는 이름들입니다
많은 애플리케이션에서 다양한 이름 규칙을
사용하여 이들을 호출합니다
어떤 프로젝트에서는 권한(privileges)이라고 칭하고
어떤 프로젝트에서는 액션(action)이라고 부르기도 합니다
프로젝트 내에서 우리가
어떤 이름인지 상관없이 사용하는 것에과는 다르게
Spring Security에서는
인가를 강제하기 위해
반드시 권한 또는 역할 중에 선택을 해야만 합니다
권한 정보를 부여된 권한 및
단순 부여된 권한 클래스를
사용하여 표현하는 것과 마찬가지로
역할도 Spring Security 프레임워크 내에서
동일한 인터페이스와
클래스를 따를 것입니다
그러나 특정 문자열이 권한인지 역할인지를 구별하기 위해서는
Spring Security 프레임워크 내에서
표준이 강제되어 있습니다
이 표준은 특정 문자열이 웹 애플리케이션 내에서
권한을 나타내는지 역할을 나타내는지
구별하기 위해
저장 시스템 내에서
항상 ROLE_ 접두사를 가져야 한다는 것입니다
우리는 이제 권한과 역할에 대해
살펴보았습니다
다음 단계로는 우리의 데이터베이스 내에서
엔드 유저가 가진
모든 존재하는 권한을 삭제하고 그 안에
ROLE_ADMIN과 ROLE_USER와 같은 몇 가지의 역할을 생성하는 겁니다
이를 위해서 데이터베이스로 가봅시다
여기 제 데이터베이스 내에
이것들이 제가 가진 권한들입니다
제가 우선적으로 할 것은
DELETE FROM 스크립트를
활용하여
모든 권한을 삭제하려고 합니다
이것으로 모든 권한은 삭제되었습니다
그리고 authorities 테이블 내에
두 개의 레코드를 생성하려고 합니다
제가 설정한 역할 이름은 USER와 ADMIN입니다
그리고 Spring Security가
이 ROLE_ 접두사를 유지하도록 기대하기 때문에
동일한 표준을 따르고 있는지 확인해야 합니다
이것이 바로 ROLE_USER와 ROLE_ADMIN 같은
이름을 사용하는 이유입니다
이 스크립트들을 실행해 보겠습니다
이렇게 하면 authorities 테이블에 새 레코드가 삽입됩니다
보시다시피 이제
엔드 유저 happy@example.com을 위해
두 가지의 역할을 생성했습니다
그리고 동일한 역할을 사용하여
다음 강의에서 권한을 구성하는 것을 살펴보겠습니다
감사합니다 다음 강의에서 뵙겠습니다 수고하셨습니다