6.5. JavaScript 공급자


Red Hat Single Sign-On에서는 관리자가 특정 기능을 사용자 지정할 수 있도록 런타임 중 스크립트를 실행할 수 있습니다.

  • Authenticator
  • JavaScript Policy
  • OpenID Connect 프로토콜 맵퍼
  • SAML 프로토콜 맵퍼

6.5.1. Authenticator

인증 스크립트는 다음 기능 중 하나를 제공해야 합니다. authenticate(..)..은 Authenticator#authenticate(AuthenticationFlowContext)작업(...) 에서 호출되며 Authenticator#action(AuthenticationFlowContext)에서 호출됩니다.

사용자 정의 Authenticator 는 최소한 authenticate(..) 함수를 제공해야 합니다. 코드 내에서 javax.script.Bindings 스크립트를 사용할 수 있습니다.

script
스크립트 메타데이터에 액세스하기 위한 ScriptModel
realm
제품 상세 정보
user
현재 UserModel
세션
활성 KeycloakSession
authenticationSession
현재 AuthenticationSessionModel
httpRequest
the current org.jboss.resteasy.spi.HttpRequest
LOG
org.jboss.logging.LoggerScriptBasedAuthenticator로 지정
참고

authenticate(context) action( context ) 함수에 전달된 컨텍스트 인수에서 추가 컨텍스트 정보를 추출할 수 있습니다.

AuthenticationFlowError = Java.type("org.keycloak.authentication.AuthenticationFlowError");

function authenticate(context) {

  LOG.info(script.name + " --> trace auth for: " + user.username);

  if (   user.username === "tester"
      && user.getAttribute("someAttribute")
      && user.getAttribute("someAttribute").contains("someValue")) {

      context.failure(AuthenticationFlowError.INVALID_USER);
      return;
  }

  context.success();
}

6.5.2. 배포할 스크립트를 사용하여 JAR 생성

참고

JAR 파일은 .jar 확장자가 있는 일반 ZIP 파일입니다.

Red Hat Single Sign-On에서 스크립트를 사용할 수 있도록 하려면 서버에 배포해야 합니다. 이를 위해 다음 구조를 사용하여 JAR 파일을 생성해야 합니다.

META-INF/keycloak-scripts.json

my-script-authenticator.js
my-script-policy.js
my-script-mapper.js

META-INF/keycloak-scripts.json 은 배포하려는 스크립트에 대한 메타데이터 정보를 제공하는 파일 설명자입니다. 다음 구조가 포함된 JSON 파일입니다.

{
    "authenticators": [
        {
            "name": "My Authenticator",
            "fileName": "my-script-authenticator.js",
            "description": "My Authenticator from a JS file"
        }
    ],
    "policies": [
        {
            "name": "My Policy",
            "fileName": "my-script-policy.js",
            "description": "My Policy from a JS file"
        }
    ],
    "mappers": [
        {
            "name": "My Mapper",
            "fileName": "my-script-mapper.js",
            "description": "My Mapper from a JS file"
        }
    ],
    "saml-mappers": [
        {
            "name": "My Mapper",
            "fileName": "my-script-mapper.js",
            "description": "My Mapper from a JS file"
        }
    ]
}

이 파일은 배포하려는 다양한 유형의 스크립트 공급자를 참조해야 합니다.

  • Authenticators

    OpenID Connect 스크립트 Authenticator의 경우. 동일한 JAR 파일에 하나 또는 여러 개의 인증자가 있을 수 있습니다.

  • Policies

    Red Hat Single Sign-On 권한 부여 서비스를 사용할 때 JavaScript 정책의 경우 동일한 JAR 파일에 하나 이상의 정책을 가질 수 있습니다.

  • 매퍼

    OpenID Connect 스크립트 프로토콜 맵퍼의 경우. 동일한 JAR 파일에 하나 또는 여러 개의 매퍼가 있을 수 있습니다.

  • SAML-mappers

    SAML 스크립트 프로토콜 맵퍼의 경우. 동일한 JAR 파일에 하나 또는 여러 개의 매퍼가 있을 수 있습니다.

JAR 파일의 각 스크립트 파일에 대해 스크립트 파일을 특정 공급자 유형에 매핑하는 META-INF/keycloak-scripts.json 에 해당 항목이 필요합니다. 이를 위해 각 항목에 대해 다음 속성을 제공해야 합니다.

  • name

    Red Hat Single Sign-On 관리 콘솔을 통해 스크립트를 표시하는 데 사용되는 친숙한 이름입니다. 지정하지 않으면 스크립트 파일의 이름이 대신 사용됩니다.

  • description

    스크립트 파일의 의도를 더 잘 설명하는 선택적 텍스트

  • fileName

    스크립트 파일의 이름입니다. 이 속성은 필수 이며 JAR 내에서 파일에 매핑해야 합니다.

6.5.3. 스크립트 JAR 배포

설명자가 있고 배포하려는 스크립트가 있는 JAR 파일이 있으면 JAR 파일을 Red Hat Single Sign-On 독립 실행형/deployments/ 디렉터리에 복사하면 됩니다.

6.5.3.1. Java 15 이상에 스크립트 엔진 배포

스크립트를 실행하려면 JavaScript 공급자에게 Java 애플리케이션에서 JavaScript 엔진을 사용할 수 있어야 합니다. Java 14 이하 버전에는 Nashorn JavaScript 엔진이 포함되어 있습니다. Java 자체의 일부로 자동으로 사용할 수 있으며 JavaScript 공급자는 기본적으로 이 스크립트 엔진을 사용할 수 있습니다. 그러나 Java 15 이상 버전의 경우 스크립트 엔진은 Java 자체의 일부가 아닙니다. Red Hat Single Sign-On에는 기본적으로 스크립트 엔진이 없으므로 서버에 추가해야 합니다. Java 15 이상 버전에서는 스크립트 공급자를 배포할 때 추가 단계가 필요합니다 - 배포에 선택한 스크립트 엔진을 추가합니다.

스크립트 엔진을 사용할 수 있습니다. 그러나 Nashorn JavaScript 엔진 만 테스트합니다. 다음 단계에서는 이 엔진을 사용하는 것으로 가정합니다.

새 모듈 nashorn-core를 Red Hat Single Sign-On에 추가하여 스크립트 엔진을 설치할 수 있습니다. 서버가 시작된 후 KEYCLOAK_HOME/bin 디렉터리에서 이와 유사한 명령을 실행할 수 있습니다.

export NASHORN_VERSION=15.3
wget https://repo1.maven.org/maven2/org/openjdk/nashorn/nashorn-core/$NASHORN_VERSION/nashorn-core-$NASHORN_VERSION.jar
./jboss-cli.sh -c --command="module add --module-root-dir=../modules/system/layers/keycloak/ --name=org.openjdk.nashorn.nashorn-core --resources=./nashorn-core-$NASHORN_VERSION.jar --dependencies=asm.asm,jdk.dynalink"
rm nashorn-core-$NASHORN_VERSION.jar

공급자를 다른 모듈에 설치하려면 기본 스크립팅 공급자의 구성 속성 script-engine-module 을 사용할 수 있습니다. 예를 들어 KEYCLOAK_HOME/standalone/configuration/standalone-*.xml 파일에서 다음과 같은 항목을 사용할 수 있습니다.

<spi name="scripting">
    <provider name="default" enabled="true">
        <properties>
            <property name="script-engine-module" value="org.graalvm.js.js-scriptengine"/>
        </properties>
    </provider>
</spi>
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.