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 기반 정책의 간단한 예입니다.
5.3.2.2. 현재 ID에서 속성 확인 링크 복사링크가 클립보드에 복사되었습니다!
다음은 특성 기반 액세스 제어(ABAC)를 사용하여 현재 ID와 연결된 특성을 기반으로 조건을 정의하는 JavaScript 기반 정책의 간단한 예입니다.
권한 부여 요청에 사용된 토큰에 정의된 모든 클레임에서 이러한 특성이 매핑되는 위치입니다.
5.3.2.3. 현재 ID에 부여된 역할 확인 링크 복사링크가 클립보드에 복사되었습니다!
정책에서 RBAC(역할 기반 액세스 제어)를 사용할 수도 있습니다. 아래 예제에서는 사용자에게 keycloak_user
영역 역할이 부여되었는지 확인합니다.
또는 my- client -role
클라이언트 역할이 사용자에게 부여되었는지 확인할 수 있습니다. 여기서 my-client
는 클라이언트 애플리케이션의 클라이언트 ID입니다.
5.3.2.4. 사용자에게 부여된 역할 확인 링크 복사링크가 클립보드에 복사되었습니다!
사용자에게 부여된 영역 역할을 확인하려면 다음을 수행하십시오.
const realm = $evaluation.getRealm(); if (realm.isUserInRealmRole('marta', 'role-a')) { $evaluation.grant(); }
const realm = $evaluation.getRealm();
if (realm.isUserInRealmRole('marta', 'role-a')) {
$evaluation.grant();
}
사용자에게 부여된 클라이언트 역할의 경우:
const realm = $evaluation.getRealm(); if (realm.isUserInClientRole('marta', 'my-client', 'some-client-role')) { $evaluation.grant(); }
const realm = $evaluation.getRealm();
if (realm.isUserInClientRole('marta', 'my-client', 'some-client-role')) {
$evaluation.grant();
}
5.3.2.5. 그룹에 부여된 역할 확인 링크 복사링크가 클립보드에 복사되었습니다!
그룹에 부여된 영역 역할을 확인하려면 다음을 수행하십시오.
const realm = $evaluation.getRealm(); if (realm.isGroupInRole('/Group A/Group D', 'role-a')) { $evaluation.grant(); }
const realm = $evaluation.getRealm();
if (realm.isGroupInRole('/Group A/Group D', 'role-a')) {
$evaluation.grant();
}
5.3.2.6. 리소스 서버에 임의의 클레임 푸시 링크 복사링크가 클립보드에 복사되었습니다!
권한을 적용하는 방법에 대한 추가 정보를 제공하기 위해 리소스 서버에 임의의 클레임을 푸시하려면 다음을 수행합니다.
5.3.2.7. 그룹 멤버십 확인 링크 복사링크가 클립보드에 복사되었습니다!
const realm = $evaluation.getRealm(); if (realm.isUserInGroup('marta', '/Group A/Group B')) { $evaluation.grant(); }
const realm = $evaluation.getRealm();
if (realm.isUserInGroup('marta', '/Group A/Group B')) {
$evaluation.grant();
}
5.3.2.8. 다른 액세스 제어 메커니즘 혼합 링크 복사링크가 클립보드에 복사되었습니다!
여러 액세스 제어 메커니즘의 조합을 사용할 수도 있습니다. 아래 예제에서는 역할(RBAC) 및 클레임/attribute(ABAC) 검사를 동일한 정책 내에서 사용하는 방법을 보여줍니다. 이 경우 사용자가 admin
역할로 부여되었는지 또는 keycloak.org
도메인의 이메일이 있는지 확인합니다.
자체 규칙을 작성할 때 $evaluation 오브젝트는 org.keycloak.authorization.policy.evaluation.Evaluation 을 구현하는 오브젝트임을 유의하십시오. 이 인터페이스에서 액세스할 수 있는 항목에 대한 자세한 내용은 API를 참조하십시오.