Client Scope 기반 정책

Keycloak에서 권한 부여 설정을 정교하게 구성하기 위해서는 Client Scope를 기반으로 한 정책 구성이 중요하다. Client Scope는 클라이언트가 OpenID Connect(OIDC) 또는 OAuth2.0 인증/인가 과정을 수행할 때 토큰에 포함되는 범위를 정의하는 객체다. 이 범위를 이용하면 특정 조건에서만 권한이 부여되도록 제한할 수 있다.

클라이언트가 요청 시 어떤 Client Scope를 활용하는지에 따라 부여되는 권한이 달라지도록 정책을 구성할 수 있으므로, 민감한 리소스나 액션에 대해 보다 세밀한 접근 통제가 가능하다. 예를 들어, 관리자 전용 기능을 수행해야 하는 경우 관리자 용 Client Scope를 명시적으로 요구하고, 해당 Client Scope가 포함된 요청에만 접근을 허용할 수 있다.

Client Scope 기반 정책을 구성하기 위해서는 다음과 같은 절차를 따른다.

  1. Client Scope 정의 Keycloak의 Admin Console에서 Client Scopes 메뉴로 이동한다. 사용자가 원하는 이름과 유효 기간, 흐름(Protocol) 설정 등을 지정한다. 이때 공개 범위(Public)인지, 외부에 숨겨진 범위인지(Confidential) 등을 고려하여 구성한다.

  2. 클라이언트와 Client Scope 연결 생성한 Client Scope를 사용할 클라이언트에 할당한다. 이는 클라이언트 설정에서 Client Scopes 탭을 통해 가능한데, Default Scopes 또는 Optional Scopes로 선택할 수 있다. Default Scopes로 설정된 경우 클라이언트가 명시적으로 지정하지 않아도 자동으로 토큰에 포함된다. Optional Scopes인 경우 클라이언트가 요청 시 명시적으로 범위를 요구해야 한다.

  3. Authorization 설정에서 Client Scope 정책 생성 권한 부여가 활성화된(Authorization Enabled) 클라이언트의 Authorization 탭에서 Policies 섹션을 확인한다. 여기서 새로운 정책을 생성할 때 Client Scope 기반 정책 유형(Client Scope-based policy)을 선택한다. 이 정책은 특정 Client Scope가 토큰 내에 존재하는지 여부를 조건으로 하여 접근 허용 여부를 결정한다.

  4. Policy 조건 구성 Client Scope 기반 정책을 생성한 뒤, 어떤 Client Scope가 만족되어야 하는지 지정한다. 다중 스코프를 지정하면 OR, AND 조건을 어떻게 적용할지 설정할 수 있다. 예를 들어, “admin-client-scope”와 “read-client-scope”가 모두 필요하다면 AND 조건을 사용한다.

  5. Permissions와 연동 생성한 정책을 리소스(또는 범위, 리소스 서버 전체)에 연동하기 위해 Permissions 섹션에서 필요한 Permission을 생성하고, 해당 Permission의 Apply Policy 목록에 위에서 생성한 Client Scope 정책을 추가한다. 이를 통해 특정 리소스에 대해 요청이 들어왔을 때, 요청 토큰에 정의된 Client Scope를 기준으로 권한을 부여할 수 있다.

  6. 테스트 및 검증 클라이언트가 실제로 Client Scope를 포함해 요청을 보낼 수 있도록 설정한 뒤, 해당 토큰이 반환되는지와 권한 부여가 올바르게 동작하는지 테스트한다. Client Scope가 제대로 참조되지 않으면 허가되지 않은 사용자나 클라이언트가 권한을 얻을 수 있으므로, 테스트 과정을 통해 스코프 설정이 올바른지 반드시 확인해야 한다.

이러한 Client Scope 기반 정책은 Role 기반 정책과 다르게 요청에 포함된 특정 스코프의 존재 여부를 검사한다. 따라서 사용자가 속한 Role에 상관없이, 토큰이 어떤 Client Scope를 포함하는지에 따라 세밀하게 권한을 부여하거나 거부할 수 있다. 이를 통해 민감도 높은 리소스에 대한 접근을 더 안전하게 설계할 수 있고, 인증 흐름에서 요구되는 클라이언트 측 설정(토큰 요청 시 지정해야 하는 스코프)도 명확해진다.

Client Scope를 올바르게 정의하고, 정책과 Permission에서 이를 정확히 참조하면, 다양한 시나리오에서 세밀한 접근 제어가 가능해진다. 특히 다수의 클라이언트가 여러 유형의 권한을 각각 요구하는 대규모 환경에서 유용하며, 중복되는 Role 설정 없이 스코프 단위로 접근 정책을 분리해 관리할 수 있어 편의성과 보안성을 향상시킬 수 있다.

Last updated