5.3. JavaScript 기반 정책


주의

정책 구현에서 아래 예제와 같이 특성 기반 액세스 제어(ABAC)를 사용하는 경우 사용자가 보호되는 특성을 편집할 수 없고 해당 속성이 읽기 전용입니다. 위협 모델 완화 장에서 자세한 내용을 참조하십시오.

이 유형의 정책을 사용하여 JavaScript를 사용하여 권한에 대한 조건을 정의할 수 있습니다. Red Hat Single Sign-On에서 지원하는 규칙 기반 정책 유형 중 하나로, appvail API를 기반으로 모든 정책을 작성할 수 있는 유연성을 제공합니다.

새로운 JavaScript 기반 정책을 만들려면 정책 목록의 오른쪽 상단에 있는 항목 목록에서 JavaScript 를 선택합니다.

참고

기본적으로 JavaScript 정책을 서버에 업로드할 수 없습니다. JavaScript Provider 에 설명된 대로 JS 정책을 서버에 직접 배포하는 것을 선호해야 합니다.

5.3.1. 배포된 JAR 파일에서 JS 정책 생성

Red Hat Single Sign-On을 사용하면 서버에 스크립트를 배포하기 위해 JAR 파일을 배포할 수 있습니다. 자세한 내용은 JavaScript Provider를 참조하십시오.

스크립트가 배포되면 사용 가능한 정책 공급자 목록에서 배포한 스크립트를 선택할 수 있어야 합니다.

5.3.2. 예

5.3.2.1. 평가 컨텍스트에서 속성 확인

다음은 특성 기반 액세스 제어(ABAC)를 사용하여 실행 컨텍스트에서 얻은 특성을 기반으로 조건을 정의하는 JavaScript 기반 정책의 간단한 예입니다.

const context = $evaluation.getContext();
const contextAttributes = context.getAttributes();

if (contextAttributes.containsValue('kc.client.network.ip_address', '127.0.0.1')) {
    $evaluation.grant();
}
Copy to Clipboard Toggle word wrap

5.3.2.2. 현재 ID에서 속성 확인

다음은 특성 기반 액세스 제어(ABAC)를 사용하여 현재 ID와 연결된 특성을 기반으로 조건을 정의하는 JavaScript 기반 정책의 간단한 예입니다.

const context = $evaluation.getContext();
const identity = context.getIdentity();
const attributes = identity.getAttributes();
const email = attributes.getValue('email').asString(0);

if (email.endsWith('@keycloak.org')) {
    $evaluation.grant();
}
Copy to Clipboard Toggle word wrap

권한 부여 요청에 사용된 토큰에 정의된 모든 클레임에서 이러한 특성이 매핑되는 위치입니다.

5.3.2.3. 현재 ID에 부여된 역할 확인

정책에서 RBAC(역할 기반 액세스 제어)를 사용할 수도 있습니다. 아래 예제에서는 사용자에게 keycloak_user 영역 역할이 부여되었는지 확인합니다.

const context = $evaluation.getContext();
const identity = context.getIdentity();

if (identity.hasRealmRole('keycloak_user')) {
    $evaluation.grant();
}
Copy to Clipboard Toggle word wrap

또는 my- client -role 클라이언트 역할이 사용자에게 부여되었는지 확인할 수 있습니다. 여기서 my-client 는 클라이언트 애플리케이션의 클라이언트 ID입니다.

const context = $evaluation.getContext();
const identity = context.getIdentity();

if (identity.hasClientRole('my-client', 'my-client-role')) {
    $evaluation.grant();
}
Copy to Clipboard Toggle word wrap

5.3.2.4. 사용자에게 부여된 역할 확인

사용자에게 부여된 영역 역할을 확인하려면 다음을 수행하십시오.

const realm = $evaluation.getRealm();

if (realm.isUserInRealmRole('marta', 'role-a')) {
    $evaluation.grant();
}
Copy to Clipboard Toggle word wrap

사용자에게 부여된 클라이언트 역할의 경우:

const realm = $evaluation.getRealm();

if (realm.isUserInClientRole('marta', 'my-client', 'some-client-role')) {
    $evaluation.grant();
}
Copy to Clipboard Toggle word wrap

5.3.2.5. 그룹에 부여된 역할 확인

그룹에 부여된 영역 역할을 확인하려면 다음을 수행하십시오.

const realm = $evaluation.getRealm();

if (realm.isGroupInRole('/Group A/Group D', 'role-a')) {
    $evaluation.grant();
}
Copy to Clipboard Toggle word wrap

5.3.2.6. 리소스 서버에 임의의 클레임 푸시

권한을 적용하는 방법에 대한 추가 정보를 제공하기 위해 리소스 서버에 임의의 클레임을 푸시하려면 다음을 수행합니다.

const permission = $evaluation.getPermission();

// decide if permission should be granted

if (granted) {
    permission.addClaim('claim-a', 'claim-a');
    permission.addClaim('claim-a', 'claim-a1');
    permission.addClaim('claim-b', 'claim-b');
}
Copy to Clipboard Toggle word wrap

5.3.2.7. 그룹 멤버십 확인

const realm = $evaluation.getRealm();

if (realm.isUserInGroup('marta', '/Group A/Group B')) {
    $evaluation.grant();
}
Copy to Clipboard Toggle word wrap

5.3.2.8. 다른 액세스 제어 메커니즘 혼합

여러 액세스 제어 메커니즘의 조합을 사용할 수도 있습니다. 아래 예제에서는 역할(RBAC) 및 클레임/attribute(ABAC) 검사를 동일한 정책 내에서 사용하는 방법을 보여줍니다. 이 경우 사용자가 admin 역할로 부여되었는지 또는 keycloak.org 도메인의 이메일이 있는지 확인합니다.

const context = $evaluation.getContext();
const identity = context.getIdentity();
const attributes = identity.getAttributes();
const email = attributes.getValue('email').asString(0);

if (identity.hasRealmRole('admin') || email.endsWith('@keycloak.org')) {
    $evaluation.grant();
}
Copy to Clipboard Toggle word wrap
참고

자체 규칙을 작성할 때 $evaluation 오브젝트는 org.keycloak.authorization.policy.evaluation.Evaluation 을 구현하는 오브젝트임을 유의하십시오. 이 인터페이스에서 액세스할 수 있는 항목에 대한 자세한 내용은 API를 참조하십시오.

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat