JBoss EAP에서 SSO(Single Sign-On) 사용

Red Hat JBoss Enterprise Application Platform 8.0

SSO(Single Sign-On) 사용 가이드 JBoss EAP에 배포된 애플리케이션에 인증 추가

Red Hat Customer Content Services

초록

SSO(Single Sign-On) 사용 가이드 JBoss EAP에 배포된 애플리케이션에 인증을 추가합니다.

JBoss EAP 문서에 대한 피드백 제공

오류를 보고하거나 문서를 개선하기 위해 Red Hat Jira 계정에 로그인하여 문제를 제출하십시오. Red Hat Jira 계정이 없는 경우 계정을 생성하라는 메시지가 표시됩니다.

프로세스

  1. 티켓을 생성하려면 다음 링크를 클릭하십시오.
  2. 요약 에 문제에 대한 간략한 설명을 입력합니다.
  3. 설명에서 문제 또는 개선 사항에 대한 자세한 설명을 제공합니다. 문서에서 문제가 발생한 위치에 URL을 포함합니다.
  4. Submit 을 클릭하고 문제를 적절한 문서 팀으로 라우팅합니다.

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

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 용어를 교체하기 위해 최선을 다하고 있습니다. 먼저 마스터(master), 슬레이브(slave), 블랙리스트(blacklist), 화이트리스트(whitelist) 등 네 가지 용어를 교체하고 있습니다. 이러한 변경 작업은 작업 범위가 크므로 향후 여러 릴리스에 걸쳐 점차 구현할 예정입니다. 자세한 내용은 CTO Chris Wright의 메시지를 참조하십시오.

1장. JBoss EAP의 SSO(Single Sign-On)

SSO(Single Sign-On)는 중앙 ID 공급자에서 여러 클라이언트의 ID를 인증하는 프로세스입니다. 예를 들어, 사용자는 동일한 SSO 공급자를 사용하는 다른 애플리케이션에 로그인하려면 하나의 로그인 자격 증명 세트만 있으면 됩니다.

JBoss EAP는 다음 SSO 프로토콜을 지원합니다.

OpenID Connect(OIDC)
OpenID Connect는 RFC 6749RFC 6750 에 지정된 사양의 OAuth 2.0 프레임워크를 기반으로 하는 인증 프로토콜입니다.
Security Assertion Mark-up Language v2 (SAML v2)
SAML은 일반적으로 ID 공급자와 서비스 공급자라는 두 당사자 간에 인증 및 권한 부여 정보를 교환할 수 있는 데이터 형식 및 프로토콜입니다. 이 정보는 어설션이 포함된 SAML 토큰 형태로 교환되며, ID 공급자가 서비스 공급자와의 인증을 위해 주체에게 발행됩니다. 주체는 SAML v2에서 브라우저 기반 Single Sign-On을 지원하는 여러 서비스 공급자가 발행한 SAML 토큰을 재사용할 수 있습니다.

SSO를 사용하여 베어 메탈에서 실행되는 JBoss EAP와 Red Hat OpenShift Container Platform에서 실행되는 JBoss EAP에 배포된 애플리케이션을 보호할 수 있습니다. SSO를 사용하여 Red Hat OpenShift Container Platform에서 실행되는 JBoss EAP에 배포된 애플리케이션을 보호하는 방법에 대한 자세한 내용은 OpenShift Container Platform에서 JBoss EAP 사용을 참조하십시오.

2장. Single Sign-On을 사용하여 JBoss EAP에 배포된 애플리케이션 보안

SSO(Single Sign-On)로 애플리케이션을 보호하여 Red Hat build of Keycloak과 같은 SSO 공급자에게 인증을 위임할 수 있습니다. OpenID Connect(OIDC) 또는 SAML v2(Security Assertion Markup Language v2)를 SSO 프로토콜로 사용할 수 있습니다.

SSO를 사용하여 애플리케이션을 보호하려면 다음 절차를 따르십시오.

2.1. Single Sign-On으로 보안을 위해 예제 애플리케이션 생성

JBoss EAP에 배포할 웹 애플리케이션을 생성하고 OpenID Connect(OIDC) 또는 SAML(Security Assertion Mark-up Language)을 사용하여 SSO(Single Sign-On)로 보호합니다.

참고

다음 절차는 예제로만 제공됩니다. 보안하려는 애플리케이션이 이미 있는 경우 이를 건너뛰고 Red Hat build of Keycloak에서 영역 및 사용자 생성 으로 직접 이동할 수 있습니다.

2.1.1. 웹 애플리케이션 개발을 위한 Maven 프로젝트 생성

웹 애플리케이션을 생성하려면 필수 종속성 및 디렉터리 구조가 포함된 Maven 프로젝트를 생성합니다.

중요

다음 절차는 예제로만 제공되며 프로덕션 환경에서 사용해서는 안 됩니다. JBoss EAP용 애플리케이션 생성에 대한 자세한 내용은 JBoss EAP 배포를 위한 애플리케이션 개발 시작하기 를 참조하십시오.

사전 요구 사항

프로세스

  1. mvn 명령을 사용하여 Maven 프로젝트를 설정합니다. 명령은 프로젝트에 대한 디렉터리 구조와 pom.xml 구성 파일을 생성합니다.

    구문

    $ mvn archetype:generate \
    -DgroupId=${group-to-which-your-application-belongs} \
    -DartifactId=${name-of-your-application} \
    -DarchetypeGroupId=org.apache.maven.archetypes \
    -DarchetypeArtifactId=maven-archetype-webapp \
    -DinteractiveMode=false

    예제

    $ mvn archetype:generate \
    -DgroupId=com.example.app \
    -DartifactId=simple-webapp-example \
    -DarchetypeGroupId=org.apache.maven.archetypes \
    -DarchetypeArtifactId=maven-archetype-webapp \
    -DinteractiveMode=false

  2. 애플리케이션 루트 디렉터리로 이동합니다.

    구문

    $ cd <name-of-your-application>

    예제

    $ cd simple-webapp-example

  3. 생성된 pom.xml 파일의 내용을 다음 텍스트로 바꿉니다.

    <?xml version="1.0" encoding="UTF-8"?>
    
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>com.example.app</groupId>
      <artifactId>simple-webapp-example</artifactId>
      <version>1.0-SNAPSHOT</version>
      <packaging>war</packaging>
    
      <name>simple-webapp-example Maven Webapp</name>
      <!-- FIXME change it to the project's website -->
      <url>http://www.example.com</url>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <maven.compiler.source>11</maven.compiler.source>
            <maven.compiler.target>11</maven.compiler.target>
            <version.maven.war.plugin>3.4.0</version.maven.war.plugin>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>jakarta.servlet</groupId>
                <artifactId>jakarta.servlet-api</artifactId>
                <version>6.0.0</version>
                <scope>provided</scope>
            </dependency>
        </dependencies>
    
        <build>
            <finalName>${project.artifactId}</finalName>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>${version.maven.war.plugin}</version>
                </plugin>
                <plugin>
                    <groupId>org.wildfly.plugins</groupId>
                    <artifactId>wildfly-maven-plugin</artifactId>
                    <version>4.2.2.Final</version>
                </plugin>
            </plugins>
        </build>
    </project>

검증

  • 애플리케이션 루트 디렉터리에 다음 명령을 입력합니다.

    $ mvn install

    다음과 유사한 출력이 표시됩니다.

    ...
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 0.795 s
    [INFO] Finished at: 2022-04-28T17:39:48+05:30
    [INFO] ------------------------------------------------------------------------

2.1.2. 웹 애플리케이션 생성

로그인한 사용자의 주체에서 얻은 사용자 이름을 반환하는 서블릿이 포함된 웹 애플리케이션을 생성합니다. 로그인한 사용자가 없는 경우 서블릿은 "NO AUTHENTICATED USER" 텍스트를 반환합니다.

이 절차에서 &lt ;application_home >은 애플리케이션의 pom.xml 구성 파일이 포함된 디렉터리를 나타냅니다.

사전 요구 사항

프로세스

  1. Java 파일을 저장할 디렉터리를 만듭니다.

    구문

    $ mkdir -p src/main/java/<path_based_on_artifactID>

    예제

    $ mkdir -p src/main/java/com/example/app

  2. 새 디렉터리로 이동합니다.

    구문

    $ cd src/main/java/<path_based_on_artifactID>

    예제

    $ cd src/main/java/com/example/app

  3. 다음 콘텐츠를 사용하여 SecuredServlet.java 파일을 생성합니다.

    package com.example.app;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.security.Principal;
    
    import jakarta.servlet.ServletException;
    import jakarta.servlet.annotation.WebServlet;
    import jakarta.servlet.http.HttpServlet;
    import jakarta.servlet.http.HttpServletRequest;
    import jakarta.servlet.http.HttpServletResponse;
    
    /**
     * A simple secured HTTP servlet. It returns the user name of obtained
     * from the logged-in user's Principal. If there is no logged-in user,
     * it returns the text "NO AUTHENTICATED USER".
     */
    
    @WebServlet("/secured")
    public class SecuredServlet extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            try (PrintWriter writer = resp.getWriter()) {
                writer.println("<html>");
                writer.println("  <head><title>Secured Servlet</title></head>");
                writer.println("  <body>");
                writer.println("    <h1>Secured Servlet</h1>");
                writer.println("    <p>");
                writer.print(" Current Principal '");
                Principal user = req.getUserPrincipal();
                writer.print(user != null ? user.getName() : "NO AUTHENTICATED USER");
                writer.print("'");
                writer.println("    </p>");
                writer.println("  </body>");
                writer.println("</html>");
            }
        }
    
    }
  4. 애플리케이션 루트 디렉터리에서 다음 명령을 사용하여 애플리케이션을 컴파일합니다.

    $ mvn package
    ...
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 1.015 s
    [INFO] Finished at: 2022-04-28T17:48:53+05:30
    [INFO] ------------------------------------------------------------------------
  5. 애플리케이션을 배포합니다.

    $ mvn wildfly:deploy

검증

  • 브라우저에서 http://localhost:8080/simple-webapp-example/secured 로 이동합니다.

    다음 메시지가 표시됩니다.

    Secured Servlet
    Current Principal 'NO AUTHENTICATED USER'

    인증 메커니즘이 추가되지 않으므로 애플리케이션에 액세스할 수 있습니다.

2.2. Red Hat build of Keycloak에서 영역 및 사용자 생성

Red Hat build of Keycloak의 영역은 테넌트와 동일합니다. 관리자는 각 영역을 통해 격리된 애플리케이션 및 사용자 그룹을 만들 수 있습니다.

다음 절차에서는 테스트를 위해 Red Hat build of Keycloak을 사용하여 JBoss EAP에 배포된 애플리케이션 보안을 시작하는 데 필요한 최소 단계를 간략하게 설명합니다. 자세한 구성은 Red Hat build of Keycloak Server Administration Guide 를 참조하십시오.

참고

다음 절차는 예제로만 제공됩니다. Keycloak의 Red Hat 빌드에서 영역과 사용자를 이미 구성한 경우 이 절차를 건너뛰고 애플리케이션 보안으로 직접 이동할 수 있습니다. 자세한 내용은 다음을 참조하십시오.

사전 요구 사항

  • Red Hat build of Keycloak에 대한 관리자 액세스 권한이 있습니다.

프로세스

  1. JBoss EAP 기본 포트가 8080이므로 8080 이외의 포트에서 Keycloak 서버의 Red Hat 빌드를 시작합니다.

    참고

    start-dev 명령은 프로덕션 환경에 적합하지 않습니다. 자세한 내용은 Keycloak 서버 가이드의 Red Hat 빌드에서 개발 모드에서 Red Hat build of Keycloak을 참조하십시오.

    구문

    $ <path_to_rhbk>/bin/kc.sh start-dev --http-port <offset-number>

    예제

    $ /home/servers/rhbk-22.0/bin/kc.sh start-dev --http-port 8180

  2. http://localhost:<port>/ 에서 관리 콘솔에 로그인합니다. 예: http://localhost:8180/.
  3. 영역을 생성합니다.

    1. 마스터 위로 마우스를 가져가면 Create Cryostat를 클릭합니다.
    2. 영역의 이름을 입력합니다. 예를 들면 example_realm 입니다.
    3. EnabledON 으로 설정되어 있는지 확인합니다.
    4. 생성을 클릭합니다.

    자세한 내용은 Keycloak 서버 관리 가이드의 Red Hat 빌드에서 영역 생성 을 참조하십시오.

  4. 사용자를 생성합니다.

    1. 사용자를 클릭한 다음 사용자 추가 를 클릭합니다.
    2. 사용자 이름을 입력합니다. 예를 들면 user1 입니다.
    3. 생성을 클릭합니다.

    자세한 내용은 Keycloak 서버 관리 가이드의 Red Hat 빌드에서 사용자 생성 을 참조하십시오.

  5. 사용자의 자격 증명을 설정합니다.

    1. 인증 정보를 클릭합니다.
    2. 사용자의 암호를 설정합니다. 예를 들면 passwordUser1 입니다. 임시OFF 로 전환하고 암호 설정을 클릭합니다. 확인 프롬프트에서 저장을 클릭합니다.

    자세한 내용은 Red Hat build of Keycloak Server Administration Guide에서 사용자 인증 정보 정의를 참조하십시오.

  6. 역할을 생성합니다.

    이는 JBoss EAP에서 권한 부여를 위해 구성하는 역할 이름입니다.

    1. Cryo stat 역할을 클릭한 다음 역할 생성을 클릭합니다.
    2. 관리자와 같은 역할 이름을 입력합니다.
    3. 저장을 클릭합니다.
  7. 사용자에게 역할을 할당합니다.

    1. 사용자를 클릭합니다.
    2. 역할을 할당할 사용자를 클릭합니다.
    3. 역할 매핑 을 클릭합니다.
    4. 역할 할당 을 클릭합니다.
    5. 할당할 역할을 선택합니다. 예를 들어 관리자. Assign 을 클릭합니다.

    자세한 내용은 Keycloak 서버 관리 가이드의 Red Hat 빌드에서 영역 역할 생성 을 참조하십시오.

다음 단계

2.3. OIDC를 사용하여 애플리케이션 보안

외부 OpenID 공급자를 사용하여 애플리케이션을 보호하려면 JBoss EAP 기본 OpenID Connect(OIDC) 클라이언트를 사용합니다. OIDC는 JBoss EAP와 같은 클라이언트가 OpenID 공급자가 수행한 인증을 기반으로 사용자 ID를 확인할 수 있는 ID 계층입니다. 예를 들어 Red Hat build of Keycloak을 OpenID 공급자로 사용하여 JBoss EAP 애플리케이션을 보호할 수 있습니다.

OIDC를 사용하여 애플리케이션을 보호하려면 다음 절차를 따르십시오.

2.3.1. JBoss EAP에서 OpenID Connect를 사용한 애플리케이션 보안

OpenID 공급자를 사용하여 애플리케이션을 보호하면 보안 도메인 리소스를 로컬로 구성할 필요가 없습니다. elytron-oidc-client 하위 시스템은 JBoss EAP에서 기본 OpenID Connect(OIDC) 클라이언트를 제공하여 OpenID 공급자(OP)와 연결합니다. JBoss EAP는 OpenID 공급자 구성에 따라 애플리케이션의 가상 보안 도메인을 자동으로 생성합니다. elytron-oidc-client 하위 시스템은 Relying Party(RP) 역할을 합니다.

참고

JBoss EAP 네이티브 OIDC 클라이언트는 RP 시작 로그 아웃을 지원하지 않습니다.

중요

Red Hat build of Keycloak과 함께 OIDC 클라이언트를 사용하는 것이 좋습니다. JSON 웹 토큰(JWT)인 액세스 토큰을 사용하도록 구성할 수 있고 RS256, RS384, ES256, ES384 또는 ES512 서명 알고리즘을 사용하도록 구성할 수 있는 경우 다른 OpenID 공급자를 사용할 수 있습니다.

OIDC 사용을 활성화하려면 elytron-oidc-client 하위 시스템 또는 애플리케이션 자체를 구성할 수 있습니다. JBoss EAP는 다음과 같이 OIDC 인증을 활성화합니다.

  • 애플리케이션을 JBoss EAP에 배포할 때 elytron-oidc-client 하위 시스템은 배포를 검사하여 OIDC 인증 메커니즘이 필요한지 감지합니다.
  • 하위 시스템에서 elytron-oidc-client 하위 시스템 또는 애플리케이션 배포 설명자 중 하나에서 배포에 대한 OIDC 구성을 감지하면 JBoss EAP는 애플리케이션에 대한 OIDC 인증 메커니즘을 활성화합니다.
  • 하위 시스템이 두 위치에서 OIDC 구성을 감지하면 elytron-oidc-client 하위 시스템 secure-deployment 속성의 구성이 애플리케이션 배포 설명자의 구성보다 우선합니다.
배포 구성

배포 설명자를 사용하여 OIDC로 애플리케이션을 보호하려면 다음과 같이 애플리케이션의 배포 구성을 업데이트합니다.

  • 애플리케이션 배포 설명자 web.xml 파일에서 auth-method 속성을 OIDC 로 설정합니다.

배포 설명자 업데이트 예

<login-config>
    <auth-method>OIDC</auth-method>
</login-config>

  • OIDC 구성 정보를 사용하여 websites -INF 디렉터리에 oidc.json 이라는 파일을 생성합니다.

    oidc.json 내용의 예

    {
      "client-id" : "customer-portal", 1
      "provider-url" : "http://localhost:8180/realms/demo", 2
      "ssl-required" : "external", 3
       "credentials" : {
          "secret" : "234234-234234-234234" 4
       }
    }

    1
    OpenID 공급자를 사용하여 OIDC 클라이언트를 식별하는 이름입니다.
    2
    OpenID 공급자 URL입니다.
    3
    외부 요청에 HTTPS가 필요합니다.
    4
    OpenID 공급자에 등록된 클라이언트 시크릿입니다.
하위 시스템 구성

다음과 같은 방법으로 elytron-oidc-client 하위 시스템을 구성하여 OIDC로 애플리케이션을 보호할 수 있습니다.

  • 각 애플리케이션에 동일한 OpenID 공급자를 사용하는 경우 여러 배포에 대한 단일 구성을 생성합니다.
  • 다른 애플리케이션에 다른 OpenID 공급자를 사용하는 경우 각 배포에 대해 다른 구성을 생성합니다.

단일 배포에 대한 XML 구성의 예:

<subsystem xmlns="urn:wildfly:elytron-oidc-client:1.0">
    <secure-deployment name="DEPLOYMENT_RUNTIME_NAME.war"> 1
        <client-id>customer-portal</client-id> 2
        <provider-url>http://localhost:8180/realms/demo</provider-url> 3
        <ssl-required>external</ssl-required> 4
        <credential name="secret" secret="0aa31d98-e0aa-404c-b6e0-e771dba1e798" /> 5
    </secure-deployment
</subsystem>
1
배포 런타임 이름입니다.
2
OpenID 공급자를 사용하여 OIDC 클라이언트를 식별하는 이름입니다.
3
OpenID 공급자 URL입니다.
4
외부 요청에 HTTPS가 필요합니다.
5
OpenID 공급자에 등록된 클라이언트 시크릿입니다.

동일한 OpenID 공급자를 사용하여 여러 애플리케이션을 보호하려면 예와 같이 공급자 를 별도로 구성합니다.

<subsystem xmlns="urn:wildfly:elytron-oidc-client:1.0">
    <provider name="${OpenID_provider_name}">
        <provider-url>http://localhost:8080/realms/demo</provider-url>
        <ssl-required>external</ssl-required>
    </provider>
    <secure-deployment name="customer-portal.war"> 1
        <provider>${OpenID_provider_name}</provider>
        <client-id>customer-portal</client-id>
        <credential name="secret" secret="0aa31d98-e0aa-404c-b6e0-e771dba1e798" />
    </secure-deployment>
    <secure-deployment name="product-portal.war"> 2
        <provider>${OpenID_provider_name}</provider>
        <client-id>product-portal</client-id>
        <credential name="secret" secret="0aa31d98-e0aa-404c-b6e0-e771dba1e798" />
    </secure-deployment>
</subsystem>
1
배포: customer-portal.war
2
다른 배포: product-portal.war

2.3.2. Red Hat build of Keycloak에서 OIDC 클라이언트 생성

JBoss EAP와 함께 사용하여 애플리케이션을 보호하기 위해 Red Hat build of Keycloak에서 OpenID Connect(OIDC) 클라이언트를 생성합니다.

다음 절차에서는 테스트를 위해 Red Hat build of Keycloak을 사용하여 JBoss EAP에 배포된 애플리케이션 보안을 시작하는 데 필요한 최소 단계를 간략하게 설명합니다. 자세한 구성은 Keycloak 서버 관리 가이드의 Red Hat 빌드에서 OpenID Connect 클라이언트 관리를 참조하십시오.

사전 요구 사항

프로세스

  1. Red Hat build of Keycloak Admin Console으로 이동합니다.
  2. 클라이언트를 생성합니다.

    1. 클라이언트 를 클릭한 다음 클라이언트 생성을 클릭합니다.
    2. Client 유형이 OpenID Connect 로 설정되어 있는지 확인합니다.
    3. 클라이언트 ID를 입력합니다. 예를 들면 jbeap-oidc 입니다.
    4. 다음을 클릭합니다.
    5. 기능 구성 탭에서 인증 흐름이 표준 흐름직접 액세스 권한 부여 로 설정되어 있는지 확인합니다.
    6. 다음을 클릭합니다.
    7. 로그인 설정 탭에서 Valid redirect URI 값을 입력합니다. 인증이 성공한 후 페이지를 리디렉션해야 하는 URL을 입력합니다(예: http://localhost:8080/simple-webapp-example/secured/* ).
    8. 저장을 클릭합니다.
  3. 어댑터 구성을 확인합니다.

    1. 작업을 클릭한 다음 어댑터 구성 다운로드를 클릭합니다.
    2. 연결 매개 변수를 보려면 Format Option 으로 Keycloak OIDC JSON 을 선택합니다.

      {
        "realm": "example_realm",
        "auth-server-url": "http://localhost:8180/",
        "ssl-required": "external",
        "resource": "jbeap-oidc",
        "public-client": true,
        "confidential-port": 0
      }

      Red Hat build of Keycloak을 ID 공급자로 사용하도록 JBoss EAP 애플리케이션을 구성할 때 다음과 같이 매개변수를 사용합니다.

      "provider-url" : "http://localhost:8180/realms/example_realm",
      "ssl-required": "external",
      "client-id": "jbeap-oidc",
      "public-client": true,
      "confidential-port": 0

2.3.3. OpenID Connect를 사용하여 웹 애플리케이션 보안

배포 구성을 업데이트하거나 elytron-oidc-client 하위 시스템을 구성하여 애플리케이션을 보호할 수 있습니다.

프로세스에서 생성된 애플리케이션을 사용하는 경우 웹 애플리케이션 생성 에서는 Principal의 값은 OpenID 공급자의 ID 토큰에서 가져옵니다. 기본적으로 보안 주체는 토큰의 "sub" 클레임 값입니다. 또한 "email", "preferred_username", "name", "given_name", "family_name" 또는 "nickname" 클레임의 값을 Principal로 사용할 수도 있습니다. 다음 위치 중 하나에서 Principal로 사용할 ID 토큰의 클레임 값을 지정합니다.

  • elytron-oidc-client 하위 시스템 특성 principal-attribute.
  • oidc.json 파일.

OIDC를 사용하도록 애플리케이션을 구성하는 방법은 다음 두 가지가 있습니다.

  • elytron-oidc-client 하위 시스템을 구성하여 다음을 수행합니다.

    애플리케이션 배포에 구성을 추가하지 않으려면 이 방법을 사용합니다.

  • 배포 구성 업데이트

    서버에 구성을 추가하지 않고 구성을 애플리케이션 배포 내에 유지하려는 경우 이 방법을 사용합니다.

사전 요구 사항

  • JBoss EAP에 애플리케이션을 배포했습니다.

프로세스

  1. 애플리케이션 리소스를 보호하도록 애플리케이션의 web.xml 을 구성합니다.

    <?xml version="1.0" encoding="UTF-8"?>
    
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        metadata-complete="false">
    
        <security-constraint>
            <web-resource-collection>
                <web-resource-name>secured</web-resource-name>
                <url-pattern>/secured</url-pattern>
            </web-resource-collection>
    
            <auth-constraint>
                <role-name>Admin</role-name>    1
            </auth-constraint>
        </security-constraint>
    
        <security-role>
            <role-name>*</role-name>
        </security-role>
    </web-app>
    1
    Admin 역할이 있는 사용자만 애플리케이션에 액세스할 수 있습니다. 역할이 있는 사용자가 애플리케이션에 액세스할 수 있도록 허용하려면 와일드카드 **role-name 의 값으로 사용합니다.
  2. OpenID Connect로 애플리케이션을 보호하려면 배포 구성을 업데이트하거나 elytron-oidc-client 하위 시스템을 구성합니다.

    참고

    배포 구성 및 elytron-oidc-client 하위 시스템에서 OpenID Connect를 구성하는 경우 elytron-oidc-client 하위 시스템의 구성이 애플리케이션 배포 설명자의 구성보다 우선합니다.

    • 배포 구성 업데이트.

      1. 인증 방법을 OIDC로 지정하는 애플리케이션의 web.xml 에 로그인 구성을 추가합니다.

        <web-app>
        ...
            <login-config>
                <auth-method>OIDC</auth-method>     1
            </login-config>
        ...
        </web-app>
        1
        OIDC를 사용하여 애플리케이션을 보호합니다.
      2. 다음과 같이 WEB-INF 디렉토리에 파일 oidc.json 을 생성하십시오.

        {
          "provider-url" : "http://localhost:8180/realms/example_realm",
          "ssl-required": "external",
          "client-id": "jbeap-oidc",
          "public-client": true,
          "confidential-port": 0
        }
    • elytron-oidc-client 하위 시스템 구성:

      • 애플리케이션을 보호하려면 다음 관리 CLI 명령을 사용하십시오.

        /subsystem=elytron-oidc-client/secure-deployment=simple-oidc-example.war/:add(client-id=jbeap-oidc,provider-url=http://localhost:8180/realms/example_realm,public-client=true,ssl-required=external)
  3. 애플리케이션 루트 디렉터리에서 다음 명령을 사용하여 애플리케이션을 컴파일합니다.

    $ mvn package
  4. 애플리케이션을 배포합니다.

    $ mvn wildfly:deploy

검증

  1. 브라우저에서 http://localhost:8080/simple-webapp-example/secured 로 이동합니다.

    Red Hat build of Keycloak 로그인 페이지로 리디렉션됩니다.

  2. Red Hat build of Keycloak에 정의된 사용자의 인증 정보로 로그인할 수 있습니다.

이제 애플리케이션이 OIDC를 사용하여 보호됩니다.

2.4. SAML을 사용하여 애플리케이션 보안

Keycloak SAML 어댑터 기능 팩에서 제공하는 Galleon 계층을 사용하여 SAML(Security Assertion Markup Language)을 사용하여 웹 애플리케이션을 보호할 수 있습니다.

Keycloak SAML 어댑터 기능 팩에 대한 자세한 내용은 SAML을 사용하여 애플리케이션 보안을 위한 Keycloak SAML 어댑터 기능 팩을 참조하십시오.

SAML을 사용하여 애플리케이션을 보호하려면 다음 절차를 따르십시오.

2.4.1. JBoss EAP에서 SAML을 사용한 애플리케이션 보안

Keycloak SAML 어댑터 Galleon 패키지는 Galleon 기능 팩으로 keycloak-saml, keycloak-client-saml ,keycloak-client-saml - Cryostat의 세 가지 레이어를 포함합니다. 기능 팩의 계층을 사용하여 JBoss EAP에 필요한 모듈과 구성을 설치하여 Red Hat build of Keycloak을 SAML(Security Assertion Markup Language)을 사용한 SSO(Single Sign-On)의 ID 공급자로 사용합니다.

다음 표에서는 각 계층의 사용 사례를 설명합니다.

계층적용 가능설명

keycloak-saml

OpenShift

SAML 클라이언트의 자동 등록과 함께 Source to Image(s2i)에 이 계층을 사용합니다. 이 계층을 cloud-default-config 계층과 함께 사용해야 합니다.

keycloak-client-saml

베어 메탈, OpenShift

베어 메탈의 웹 애플리케이션 및 CLI 스크립트에서 또는 배포 구성에서 keycloak-saml 하위 시스템 구성이 있는 Source to Image(s2i)에는 이 계층을 사용합니다.

keycloak-client-saml-ejb

베어 메탈

ID를 Jakarta Enterprise Cryostat로 전파하려는 애플리케이션에 이 계층을 사용합니다.

SAML 사용을 활성화하려면 keycloak-saml 하위 시스템 또는 애플리케이션 자체를 구성할 수 있습니다.

배포 구성

배포 설명자를 사용하여 SAML으로 애플리케이션을 보호하려면 다음과 같이 애플리케이션의 배포 구성을 업데이트합니다.

  • 애플리케이션 배포 설명자 web.xml 파일에서 auth-method 속성을 SAML 으로 설정합니다.

    배포 설명자 업데이트 예

    <login-config>
        <auth-method>SAML</auth-method>
    </login-config>

  • SAML 구성 정보를 사용하여 internet- INF 디렉토리에 keycloak- saml.xml 이라는 파일을 만듭니다. SAML 공급자에서 이 파일을 가져올 수 있습니다.

    keycloak-saml.xml의 예

    <keycloak-saml-adapter>
        <SP entityID=""
            sslPolicy="EXTERNAL"
            logoutPage="SPECIFY YOUR LOGOUT PAGE!">
            <Keys>
                <Key signing="true">
                    <PrivateKeyPem>PRIVATE KEY NOT SET UP OR KNOWN</PrivateKeyPem>
                    <CertificatePem>...</CertificatePem>
                </Key>
            </Keys>
            <IDP entityID="idp"
                 signatureAlgorithm="RSA_SHA256"
                 signatureCanonicalizationMethod="http://www.w3.org/2001/10/xml-exc-c14n#">
                <SingleSignOnService signRequest="true"
                                     validateResponseSignature="true"
                                     validateAssertionSignature="false"
                                     requestBinding="POST"
                                     bindingUrl="http://localhost:8180/realms/example_saml_realm/protocol/saml"/>
                <SingleLogoutService signRequest="true"
                                     signResponse="true"
                                     validateRequestSignature="true"
                                     validateResponseSignature="true"
                                     requestBinding="POST"
                                     responseBinding="POST"
                                     postBindingUrl="http://localhost:8180/realms/example_saml_realm/protocol/saml"
                                     redirectBindingUrl="http://localhost:8180/realms/example_saml_realm/protocol/saml"/>
            </IDP>
        </SP>
    </keycloak-saml-adapter>

    PrivateKeyPemCertificatePem 의 값은 각 클라이언트에 대해 고유합니다.

하위 시스템 구성

keycloak-saml 하위 시스템을 구성하여 SAML으로 애플리케이션을 보호할 수 있습니다. Red Hat build of Keycloak에서 하위 시스템 구성 명령을 포함하는 클라이언트 구성 파일을 가져올 수 있습니다. 자세한 내용은 클라이언트 어댑터 구성 생성을 참조하십시오.

2.4.2. Red Hat build of Keycloak에서 SAML 클라이언트 생성

Red Hat build of Keycloak에서 JBoss EAP와 함께 사용하여 애플리케이션을 보호하도록 SAML(Security Assertion Markup Language) 클라이언트를 생성합니다.

다음 절차에서는 테스트를 위해 Red Hat build of Keycloak을 사용하여 JBoss EAP에 배포된 애플리케이션 보안을 시작하는 데 필요한 최소 단계를 간략하게 설명합니다. 자세한 구성은 Keycloak 서버 관리 가이드의 Red Hat 빌드에서 SAML 클라이언트 생성 을 참조하십시오.

사전 요구 사항

프로세스

  1. Red Hat build of Keycloak Admin Console으로 이동합니다.
  2. 클라이언트를 생성합니다.

    1. 클라이언트 를 클릭한 다음 클라이언트 생성을 클릭합니다.
    2. SAML클라이언트 유형으로 선택합니다.
    3. 보안할 애플리케이션의 URL을 클라이언트 ID 로 입력합니다. 예: http://localhost:8080/simple-webapp-example/secured/.

      중요

      클라이언트 ID는 애플리케이션의 URL과 정확히 일치해야 합니다. 클라이언트 ID가 일치하지 않으면 다음과 유사한 오류가 표시됩니다.

      2023-05-17 19:54:31,586 WARN  [org.keycloak.events] (executor-thread-0) type=LOGIN_ERROR, realmId=eba0f106-389f-4216-a676-05fcd0c0c72e, clientId=null, userId=null, ipAddress=127.0.0.1, error=client_not_found, reason=Cannot_match_source_hash
    4. 클라이언트 이름을 입력합니다. 예를 들면 jbeap-saml 입니다.
    5. 다음을 클릭합니다.
    6. 다음 정보를 입력합니다.

이제 구성된 클라이언트를 사용하여 JBoss EAP에 배포된 웹 애플리케이션을 보호할 수 있습니다. 자세한 내용은 SAML을 사용하여 웹 애플리케이션 보안 을 참조하십시오.

2.4.3. SAML을 사용하여 웹 애플리케이션 보안

Keycloak SAML 어댑터 기능 팩은 OpenShift가 아닌 배포를 위한 두 계층( keycloak-client-saml )과 keycloak-client-saml- Cryostat를 제공합니다. keycloak-client-saml 계층을 사용하여 서블릿 기반 웹 애플리케이션을 보호하고 keycloak-client-saml- Cryostat를 사용하여 Jakarta Enterprise Cryostats 애플리케이션을 보호합니다.

SAML을 사용하도록 애플리케이션을 구성하는 방법은 다음 두 가지가 있습니다.

  • keycloak-saml 하위 시스템을 구성하여 다음을 수행합니다.

    애플리케이션 배포에 구성을 추가하지 않으려면 이 방법을 사용합니다.

  • 배포 구성 업데이트

    서버에 구성을 추가하지 않고 구성을 애플리케이션 배포 내에 유지하려는 경우 이 방법을 사용합니다.

사전 요구 사항

프로세스

  1. jboss-eap-installation-manager 를 사용하여 필요한 Keycloak SAML 어댑터 계층을 서버에 추가합니다. 다음은 사용 가능한 계층의 세부 정보입니다.

  2. 애플리케이션 리소스를 보호하도록 애플리케이션의 web.xml 을 구성합니다.

    <?xml version="1.0" encoding="UTF-8"?>
    
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        metadata-complete="false">
    
        <security-constraint>
            <web-resource-collection>
                <web-resource-name>secured</web-resource-name>
                <url-pattern>/secured</url-pattern>
            </web-resource-collection>
    
            <auth-constraint>
                <role-name>Admin</role-name>    1
            </auth-constraint>
        </security-constraint>
    
        <security-role>
            <role-name>*</role-name>
        </security-role>
    </web-app>
    1
    Admin 역할이 있는 사용자만 애플리케이션에 액세스할 수 있습니다. 역할이 있는 사용자가 애플리케이션에 액세스할 수 있도록 허용하려면 와일드카드 **role-name 의 값으로 사용합니다.
  3. 관리 CLI를 사용하거나 애플리케이션 배포를 업데이트하여 SAML으로 애플리케이션을 보호합니다.

    • 애플리케이션 배포를 업데이트합니다.

      1. 인증 방법을 SAML으로 지정하는 애플리케이션의 web.xml 에 로그인 구성을 추가합니다.

        <web-app>
        ...
            <login-config>
                <auth-method>SAML</auth-method>     1
            </login-config>
        ...
        </web-app>
        1
        SAML을 사용하여 애플리케이션을 보호합니다.
      2. Red Hat build of Keycloak에서 구성 keycloak-saml.xml 파일을 다운로드하여 애플리케이션의 internet -INF/ 디렉터리에 저장합니다.

        자세한 내용은 클라이언트 어댑터 구성 생성을 참조하십시오.

        keycloak-saml.xml의 예

        <keycloak-saml-adapter>
            <SP entityID=""
                sslPolicy="EXTERNAL"
                logoutPage="SPECIFY YOUR LOGOUT PAGE!">
                <Keys>
                    <Key signing="true">
                        <PrivateKeyPem>PRIVATE KEY NOT SET UP OR KNOWN</PrivateKeyPem>
                        <CertificatePem>...</CertificatePem>
                    </Key>
                </Keys>
                <IDP entityID="idp"
                     signatureAlgorithm="RSA_SHA256"
                     signatureCanonicalizationMethod="http://www.w3.org/2001/10/xml-exc-c14n#">
                    <SingleSignOnService signRequest="true"
                                         validateResponseSignature="true"
                                         validateAssertionSignature="false"
                                         requestBinding="POST"
                                         bindingUrl="http://localhost:8180/realms/example_saml_realm/protocol/saml"/>
                    <SingleLogoutService signRequest="true"
                                         signResponse="true"
                                         validateRequestSignature="true"
                                         validateResponseSignature="true"
                                         requestBinding="POST"
                                         responseBinding="POST"
                                         postBindingUrl="http://localhost:8180/realms/example_saml_realm/protocol/saml"
                                         redirectBindingUrl="http://localhost:8180/realms/example_saml_realm/protocol/saml"/>
                </IDP>
            </SP>
        </keycloak-saml-adapter>

        PrivateKeyPemCertificatePem 의 값은 각 클라이언트에 대해 고유합니다.

    • 관리 CLI 사용.

      1. Red Hat build of Keycloak에서 클라이언트 구성 파일 keycloak-saml-subsystem.cli 를 다운로드합니다.

        자세한 내용은 클라이언트 어댑터 구성 생성을 참조하십시오.

        예제 keycloak-saml-subsystem.cli

        /subsystem=keycloak-saml/secure-deployment=YOUR-WAR.war/:add
        
        /subsystem=keycloak-saml/secure-deployment=YOUR-WAR.war/SP="http://localhost:8080/simple-webapp-example/"/:add(sslPolicy=EXTERNAL,logoutPage="SPECIFY YOUR LOGOUT PAGE!"
        
        /subsystem=keycloak-saml/secure-deployment=YOUR-WAR.war/SP="http://localhost:8080/simple-webapp-example/"/Key=KEY1:add(signing=true, \
        PrivateKeyPem="...", CertificatePem="...")
        
        /subsystem=keycloak-saml/secure-deployment=YOUR-WAR.war/SP="http://localhost:8080/simple-webapp-example/"/IDP=idp/:add( \
            SingleSignOnService={ \
                signRequest=true, \
                validateResponseSignature=true, \
                validateAssertionSignature=false, \
                requestBinding=POST, \
                bindingUrl=http://localhost:8180/realms/example-saml-realm/protocol/saml}, \
            SingleLogoutService={ \
                signRequest=true, \
                signResponse=true, \
                validateRequestSignature=true, \
                validateResponseSignature=true, \
                requestBinding=POST, \
                responseBinding=POST, \
                postBindingUrl=http://localhost:8180/realms/example-saml-realm/protocol/saml, \
                redirectBindingUrl=http://localhost:8180/realms/example-saml-realm/protocol/saml} \
        )
        
        /subsystem=keycloak-saml/secure-deployment=YOUR-WAR.war/SP="http://localhost:8080/simple-webapp-example/"/IDP=idp/:write-attribute(name=signatureAlgorithm,value=RSA_SHA256)
        
        /subsystem=keycloak-saml/secure-deployment=YOUR-WAR.war/SP="http://localhost:8080/simple-webapp-example/"/IDP=idp/:write-attribute(name=signatureCanonicalizationMethod,value=http://www.w3.org/2001/10/xml-exc-c14n#)

        PrivateKeyPemCertificatePem 의 값은 각 클라이언트에 대해 고유합니다.

      2. 클라이언트 구성 파일에서 애플리케이션 WAR 의 모든 발생(예: simple-webapp-example.war )을 업데이트합니다.

        참고

        생성된 CLI 스크립트의 두 번째 문 끝에 누락되어 있습니다.

        /subsystem=keycloak-saml/secure-deployment=YOUR-WAR.war/SP=""/:add(sslPolicy=EXTERNAL,logoutPage="SPECIFY YOUR LOGOUT PAGE!"

        누락된 항목을 추가해야 합니다. )

      3. 관리 CLI를 사용하여 keycloak-saml-subsystem.cli 스크립트를 실행하여 JBoss EAP를 구성합니다.

        $ <EAP_HOME>/bin/jboss-cli.sh -c --file=<path_to_the_file>/keycloak-saml-subsystem.cli
  4. 애플리케이션을 배포합니다.

    $ mvn wildfly:deploy

검증

  1. 브라우저에서 애플리케이션 URL로 이동합니다. 예: http://localhost:8080/simple-webapp-example/secured.

    Keycloak 로그인 페이지의 Red Hat 빌드로 리디렉션됩니다.

  2. Red Hat build of Keycloak에 정의된 사용자의 인증 정보로 로그인할 수 있습니다.

이제 SAML을 사용하여 애플리케이션이 보호됩니다.

3장. OIDC를 사용할 때 서블릿에서 Jakarta Enterprise Cryostat로 ID 전파

Servlet에서 OIDC(OpenID Connect) 공급자에서 얻은 보안 ID를 두 가지 방법으로 Jakarta Enterprise Cryostat로 전파할 수 있습니다.

  • 동일한 가상 보안 도메인을 사용하여 Servlet 및 Jakarta Enterprise Cryostat를 모두 보호합니다.
  • 서블릿과 연결된 가상 보안 도메인에서 Jakarta Enterprise Cryostat를 보호하는 보안 도메인으로 ID를 전파합니다.

3.1. OIDC를 사용할 때 자카르타 Enterprise Cryostat에 대한 ID 전파

OpenID Connect(OIDC)를 사용하여 애플리케이션을 보호하면 elytron-oidc-client 하위 시스템이 가상 보안 도메인을 자동으로 생성합니다. OIDC 공급자에서 가져온 가상 보안 도메인의 보안 ID를 애플리케이션에서 호출하는 Jakarta Enterprise Cryostat로 전파할 수 있습니다.

다음 표에서는 사용하는 보안 도메인 및 애플리케이션 배포 방법에 따라 필요한 구성을 보여줍니다.

자카르타 Enterprise Cryostat를 보호하는 데 사용할 보안 도메인서블릿과 자카르타 Enterprise Cryostat는 동일한 WAR 또는 EAR에 있습니다.서블릿과 자카르타 Enterprise Cryostat는 다른 WAR 또는 EAR에 있습니다.

가상 보안 도메인

구성이 필요하지 않습니다.

가상 보안 도메인은 Jakarta Enterprise Cryostats에 대해 명시적으로 지정된 보안 도메인 구성이 없는 경우 보안 ID를 Jakarta Enterprise Cryostats로 자동 확장합니다.

다음과 같이 구성합니다.

다른 보안 도메인

가상 보안 도메인의 보안 ID를 다른 보안 도메인으로 비활성화하려면 다음 리소스를 구성해야 합니다.

  • virtual-security-domain: 가상 보안 도메인에 의해 설정된 보안 ID가 자동으로 다른 보안 도메인으로 확장되도록 지정합니다.
  • security-domain: 구성한 가상 보안 도메인에 의해 설정된 보안 ID를 신뢰해야 함을 나타냅니다.

자세한 내용은 가상 보안 도메인에서 보안 도메인으로 ID 전파를 참조하십시오.

3.2. 가상 보안 도메인을 사용하여 Jakarta Enterprise Cryostats 애플리케이션 보안

elytron-oidc-client 하위 시스템에서 생성한 가상 보안 도메인을 사용하여 Jakarta Enterprise Cryostat를 보안하여 Jakarta Enterprise Cryostats를 호출하는 서블릿과 동일한 배포에 있고 다른 배포에 있는 경우 모두 보안할 수 있습니다.

Jakarta Enterprise Cryostats가 이를 호출하는 서블릿과 동일한 배포에 있는 경우 서블릿에서 Jakarta Enterprise Cryostats로 보안 ID를 아웃플로우할 필요가 없습니다.

이 절차의 단계에 따라 서블릿에서 다른 배포에 있는 Jakarta Enterprise Cryostat로 보안 ID를 간소화합니다.

사전 요구 사항

  • OIDC(OpenID Connect) 공급자를 사용하여 Jakarta Enterprise Cryostat를 호출하는 애플리케이션을 보호했습니다.
  • 보안을 위해 자카르타 Enterprise Cryostat를 생성했습니다.

프로세스

  1. OIDC로 보안된 Servlet을 포함하는 WAR 또는 OIDC로 보안된 하위 배포가 포함된 EAR를 참조하는 virtual-security-domain 리소스를 생성합니다.

    구문

    /subsystem=elytron/virtual-security-domain=<deployment_name>:add()

    예제

    /subsystem=elytron/virtual-security-domain=simple-ear-example.ear:add()

  2. 애플리케이션을 보호하는 데 사용할 가상 보안 도메인 리소스를 참조하는 Jakarta Enterprise Cryostats 애플리케이션에 org.jboss. Cryostat3.annotation.SecurityDomain 주석을 추가합니다.

    구문

    @SecurityDomain("<deployment_name>")

    예제

    ...
    @SecurityDomain("simple-ear-example.ear")
    @Remote(RemoteHello.class)
    @Stateless
    public class RemoteHelloBean implements RemoteHello {
    
      @Resource
      private SessionContext context;
    
      @Override
      public String whoAmI() {
        return context.getCallerPrincipal().getName();
      }
    
    }

    OIDC로 보안된 서블릿에서 이 Jakarta Enterprise Cryostat를 호출하면 whoAmI() 가 반환한 주체가 OIDC 공급자에서 얻은 Servlet과 일치합니다.

  3. Jakarta Enterprise Cryostat를 배포합니다.

    예제

    $ mvn wildfly:deploy

3.3. 가상 보안 도메인에서 보안 도메인으로 ID 전파

OIDC(OpenID Connect) 공급자에서 가져온 가상 보안 도메인의 보안 ID를 다른 보안 도메인으로 전파할 수 있습니다. 가상 보안 도메인이 아닌 ID를 전파하는 보안 도메인에 의해 보안 ID의 역할을 결정하려면 이 작업을 수행할 수 있습니다.

다음 절차의 단계는 Jakarta Enterprise Cryostats를 호출하는 서블릿과 Jakarta Enterprise Cryostat가 동일한 배포에 있고 별도의 배포에 있는 경우 모두 적용됩니다.

사전 요구 사항

  • OIDC 공급자를 사용하여 Jakarta Enterprise Cryostats를 호출하는 애플리케이션을 보호했습니다.
  • 보안을 위해 자카르타 Enterprise Cryostat를 생성했습니다.
  • 보안 도메인을 사용하여 Jakarta Enterprise Cryostat를 보호했습니다.

프로세스

  1. OIDC로 보안된 Servlet을 포함하는 WAR 또는 OIDC로 보안된 하위 배포가 포함된 EAR를 참조하는 virtual-security-domain 리소스를 생성합니다.

    구문

    /subsystem=elytron/virtual-security-domain=<deployment_name>:add(outflow-security-domains=[<domain_to_propagate_to>])

    예제

    /subsystem=elytron/virtual-security-domain=simple-ear-example.ear:add(outflow-security-domains=[exampleEJBSecurityDomain])

  2. virtual-security-domain 을 신뢰하도록 Jakarta Enterprise Cryostats의 보안 도메인 구성을 업데이트합니다.

    구문

    /subsystem=elytron/security-domain=<security_domain_name>:write-attribute(name=trusted-virtual-security-domains,value=[<deployment_name>])

    예제

    /subsystem=elytron/security-domain=exampleEJBSecurityDomain:write-attribute(name=trusted-virtual-security-domains,value=[simple-ear-example.ear])

  3. 서버를 다시 로드합니다.

    reload
  4. Jakarta Enterprise Cryostat를 배포합니다.

    예제

    $ mvn wildfly:deploy

4장. OpenID 공급자를 사용하여 JBoss EAP 관리 콘솔 보안

OIDC를 사용하여 Red Hat build of Keycloak과 같은 외부 ID 공급자로 JBoss EAP 관리 콘솔을 보호할 수 있습니다. 외부 ID 공급자를 사용하면 ID 공급자에 인증을 위임할 수 있습니다.

OIDC를 사용하여 JBoss EAP 관리 콘솔을 보호하려면 다음 절차를 따르십시오.

4.1. OIDC를 사용한 JBoss EAP 관리 콘솔 보안

Red Hat build of Keycloak 및 elytron-oidc-client 하위 시스템과 같은 OIDC 공급자를 구성하여 OpenID Connect(OIDC)를 사용하여 JBoss EAP 관리 콘솔을 보호할 수 있습니다.

중요

OIDC를 사용하여 관리형 도메인으로 실행되는 JBoss EAP의 관리 콘솔 보안은 지원되지 않습니다.

OIDC를 사용한 JBoss EAP 관리 콘솔 보안은 다음과 같이 작동합니다.

  • elytron-oidc-client 하위 시스템에서 secure-server 리소스를 구성하면 JBoss EAP 관리 콘솔은 로그인할 OIDC 공급자 로그인 페이지로 리디렉션됩니다.
  • 그런 다음 JBoss EAP는 secure-deployment 리소스 구성을 사용하여 전달자 토큰 인증으로 관리 인터페이스를 보호합니다.
참고

OIDC는 브라우저에서 웹 애플리케이션에 액세스하는 데 의존합니다. 따라서 OIDC로 JBoss EAP 관리 CLI를 보호할 수 없습니다.

RBAC 지원

OIDC 공급자의 역할을 구성하고 할당하여 JBoss EAP 관리 콘솔에 RBAC(역할 기반 액세스 제어)를 구현할 수 있습니다. JBoss EAP에는 JBoss EAP RBAC 구성에 정의된 RBAC에 대한 사용자 역할이 포함되어 있습니다. RBAC에 대한 자세한 내용은 JBoss EAP 7.4 Security Architecture 가이드의 역할 기반 액세스 제어를 참조하십시오.

4.2. JBoss EAP 관리 콘솔을 보호하도록 Red Hat build of Keycloak 구성

JBoss EAP 관리 콘솔을 보호하도록 OIDC(OpenID Connect) 공급자에서 필요한 사용자, 역할 및 클라이언트를 구성합니다.

OIDC로 관리 콘솔을 보호하려면 두 개의 클라이언트가 필요합니다. 클라이언트를 다음과 같이 구성해야 합니다.

  • 표준 흐름을 위해 구성된 클라이언트입니다.
  • 전달자 전용 클라이언트로 구성된 클라이언트입니다.

다음 절차에서는 테스트 목적으로 OIDC를 사용하여 JBoss EAP 관리 콘솔 보안을 시작하는 데 필요한 최소 단계를 간략하게 설명합니다. 자세한 구성은 Red Hat build of Keycloak 설명서를 참조하십시오.

사전 요구 사항

  • Red Hat build of Keycloak에 대한 관리자 액세스 권한이 있습니다.
  • Red Hat build of Keycloak이 실행 중입니다.

프로세스

  1. Keycloak 관리 콘솔의 Red Hat 빌드를 사용하여 Keycloak의 Red Hat 빌드에 영역을 만듭니다(예: example_jboss_infra ). 이 영역을 사용하여 필요한 사용자, 역할 및 클라이언트를 생성합니다.

    자세한 내용은 영역 생성을 참조하십시오.

  2. 사용자를 생성합니다. 예를 들면 user1 입니다.

    자세한 내용은 사용자 생성 을 참조하십시오.

  3. 사용자의 암호를 만듭니다. 예를 들면 passwordUser1 입니다.

    자세한 내용은 사용자의 암호 설정을 참조하십시오.

  4. 역할을 생성합니다. 예를 들면 Administrator 입니다.

    JBoss EAP에서 RBAC(역할 기반 액세스 제어)를 활성화하려면 이름은 Administrator 와 같은 표준 RBAC 역할 중 하나여야 합니다. JBoss EAP의 RBAC에 대한 자세한 내용은 JBoss EAP 7.4 Security Architecture 가이드의 역할 기반 액세스 제어를 참조하십시오.

    Keycloak의 Red Hat 빌드에서 역할을 생성하는 방법에 대한 자세한 내용은 영역 역할 생성을 참조하십시오.

  5. 사용자에게 역할을 할당합니다.

    자세한 내용은 역할 매핑 할당을 참조하십시오.

  6. OpenID Connect 클라이언트를 생성합니다(예: jboss-console ).

    • 다음 기능 구성 값이 선택되어 있는지 확인합니다.

      • 표준 흐름
      • 직접 액세스 권한 부여
    • 로그인 설정 페이지에서 최소한 다음 속성을 설정합니다.

  7. 다른 OpenID Connect 클라이언트(예: jboss-management )를 베어러 전용 클라이언트로 생성합니다.

    • 기능 구성에서 다음 옵션을 선택 취소합니다.

      • 표준 흐름
      • 직접 액세스 권한 부여
    • 로그인 설정 페이지에서 필드를 지정할 필요가 없습니다.

이제 정의한 클라이언트를 사용하여 JBoss EAP 관리 콘솔을 보호할 수 있습니다. 자세한 내용은 OpenID Connect를 사용하여 JBoss EAP 관리 콘솔 보안 을 참조하십시오.

4.3. OpenID Connect를 사용하여 JBoss EAP 관리 콘솔 보안

OpenID Connect(OIDC)를 사용하여 JBoss EAP 관리 콘솔을 보호하면 JBoss EAP가 사용자가 관리 콘솔에 로그인할 수 있도록 OIDC 공급자로 리디렉션됩니다.

사전 요구 사항

프로세스

  1. elytron-oidc-client 하위 시스템에서 OIDC 공급자를 구성합니다.

    구문

    /subsystem=elytron-oidc-client/provider=keycloak:add(provider-url=<OIDC_provider_URL>)

    예제

    /subsystem=elytron-oidc-client/provider=keycloak:add(provider-url=http://localhost:8180/realms/example_jboss_infra)

  2. wildfly -management 라는 보안 배포 리소스를 생성하여 관리 인터페이스를 보호합니다.

    구문

    /subsystem=elytron-oidc-client/secure-deployment=wildfly-management:add(provider=<OIDC_provider_name>,client-id=<OIDC_client_name>,principal-attribute=<attribute_to_use_as_principal>,bearer-only=true,ssl-required=<internal_or_external>)

    예제

    /subsystem=elytron-oidc-client/secure-deployment=wildfly-management:add(provider=keycloak,client-id=jboss-management,principal-attribute=preferred_username,bearer-only=true,ssl-required=EXTERNAL)

  3. 옵션: 다음 명령을 사용하여 역할 기반 액세스 제어(RBAC)를 활성화할 수 있습니다.

    /core-service=management/access=authorization:write-attribute(name=provider,value=rbac)
    /core-service=management/access=authorization:write-attribute(name=use-identity-roles,value=true)
  4. jboss-console 클라이언트를 참조하는 wildfly-console 이라는 secure-server 리소스를 생성합니다.

    구문

    /subsystem=elytron-oidc-client/secure-server=wildfly-console:add(provider=<OIDC_provider_name>,client-id=<OIDC_client_name>,public-client=true)

    예제

    /subsystem=elytron-oidc-client/secure-server=wildfly-console:add(provider=keycloak,client-id=jboss-console,public-client=true)

    중요

    JBoss EAP 관리 콘솔을 사용하려면 secure-server 리소스의 이름을 wildfly-console 로 지정해야 합니다.

검증

  1. 관리 콘솔에 액세스합니다. 기본적으로 관리 콘솔은 http://localhost:9990 에서 사용할 수 있습니다.

    OIDC 공급자로 리디렉션됩니다.

  2. OIDC 공급자에서 생성한 사용자의 인증 정보로 로그인합니다.

이제 JBoss EAP 관리 콘솔이 OIDC로 보호됩니다.

5장. reference

5.1. Elytron-oidc-client 하위 시스템 속성

elytron-oidc-client 하위 시스템은 동작을 구성하는 속성을 제공합니다.

표 5.1. Elytron-oidc-client 하위 시스템 속성

속성설명

provider

OpenID Connect 공급자에 대한 구성입니다.

secure-deployment

OpenID Connect 공급자가 보호하는 배포입니다.

realm

Red Hat build of Keycloak 영역에 대한 구성입니다. 이는 편의를 위해 제공됩니다. keycloak 클라이언트 어댑터에서 구성을 복사하여 여기에서 사용할 수 있습니다. 대신 공급자 를 사용하는 것이 좋습니다.

다음 목적을 위해 세 가지 elytron-oidc-client 속성을 사용합니다.

  • provider: OpenID Connect 공급자를 구성하는 데 사용됩니다. 자세한 내용은 공급자 특성을 참조하십시오.
  • secure-deployment: OpenID Connect에 의해 보안된 배포를 구성하는 데 사용됩니다. 자세한 내용은 secure-deployment 특성을참조하십시오.
  • realm: Red Hat build of Keycloak을 구성하는 데 사용됩니다. 자세한 내용은 영역 특성을 참조하십시오. 영역 사용은 권장되지 않습니다. 편의를 위해 제공됩니다. keycloak 클라이언트 어댑터에서 구성을 복사하여 여기에서 사용할 수 있습니다. 대신 provider 특성을 사용하는 것이 좋습니다.

표 5.2. 공급자 속성

속성기본값설명

allow-any-hostname

false

값을 true 로 설정하면 OpenID 공급자와 통신할 때 호스트 이름 확인을 건너뜁니다. 이 기능은 테스트할 때 유용합니다. 프로덕션 환경에서는 이 값을 true 로 설정하지 마십시오.

always-refresh-token

 

true 로 설정하면 애플리케이션이 웹 요청을 수신할 때마다 토큰을 새로고침하고 새 액세스 토큰을 가져오도록 OpenID 공급자에게 새 요청을 보냅니다.

auth-server-url

 

Keycloak 영역 권한 부여 서버의 Red Hat 빌드의 기본 URL입니다. 이 속성을 사용하는 경우 realm 속성도 정의해야 합니다.

또는 provider-url 특성을 사용하여 단일 특성에 기본 URL과 영역을 모두 제공할 수 있습니다.

autodetect-bearer-only

false

베어러 전용 요청을 자동으로 감지할지 여부를 설정합니다.

전달자 전용 요청이 수신되고 autodetect-bearer-onlytrue 로 설정되면 애플리케이션이 브라우저 로그인에 참여할 수 없습니다.

이 속성을 사용하여 X-Requested-with, CryostatAction 또는 Accept 와 같은 헤더를 기반으로 SOAP (Simple Object Access Protocol) 또는 REST 클라이언트를 자동으로 감지합니다.

client-id

 

OpenID 공급자에 등록된 JBoss EAP의 클라이언트 ID입니다.

client-key-password

 

client-keystore 를 지정하는 경우 이 속성에서 암호를 지정합니다.

client-keystore

 

애플리케이션이 HTTPS를 통해 OpenID 공급자와 통신하는 경우 이 속성의 클라이언트 키 저장소 경로를 설정합니다.

client-keystore-password

 

클라이언트 키 저장소를 지정하는 경우 이 속성에서 액세스하기 위한 암호를 제공합니다.

confidential-port

8443

OpenID 공급자가 사용하는 기밀 포트(SSL/TLS)를 지정합니다.

connection-pool-size

 

OpenID 공급자와 통신할 때 사용할 연결 풀 크기를 지정합니다.

connection-timeout-millis

-1L

원격 호스트와의 연결을 밀리초 단위로 설정하기 위한 시간 제한을 지정합니다. 최소값은 -1L 이고 최대 2147483647L 입니다.-1L 은 값이 정의되지 않음을 나타냅니다. 기본값은 undefined입니다.

connection-ttl-millis

-1L

연결을 활성 상태로 유지하는 데 걸리는 시간(밀리초)을 지정합니다. 최소는 -1L 이고 최대 2147483647L 입니다. -1L 은 값이 정의되지 않음, 이는 기본값임을 나타냅니다.

cors-allowed-headers

 

CORS(Cross-Origin Resource Sharing)가 활성화된 경우 Access-Control-Allow-Headers 헤더 값을 설정합니다. 쉼표로 구분된 문자열이어야 합니다. 이는 선택 사항입니다. 설정되지 않은 경우 이 헤더는 CORS 응답에서 반환되지 않습니다.

CORS-allowed-methods

 

CORS(Cross-Origin Resource Sharing)가 활성화된 경우 Access-Control-Allow-Methods 헤더 값을 설정합니다. 쉼표로 구분된 문자열이어야 합니다. 이는 선택 사항입니다. 설정되지 않은 경우 이 헤더는 CORS 응답에서 반환되지 않습니다.

cors-exposed-headers

 

CORS가 활성화된 경우 Access-Control-Expose-Headers 헤더 값을 설정합니다. 쉼표로 구분된 문자열이어야 합니다. 이는 옵트인입니다. 설정되지 않은 경우 이 헤더는 CORS 응답에서 반환되지 않습니다.

cors-max-age

 

CORS(Cross-Origin Resource Sharing) Max-Age 헤더 값을 설정합니다. 값은 -1L2147483647L 사이일 수 있습니다. 이 속성은 enable-corstrue 로 설정된 경우에만 적용됩니다.

disable-trust-manager

 

HTTPS를 통해 OpenID 공급자와 통신할 때 신뢰 관리자를 사용할지 여부를 지정합니다.

enable-cors

false

Red Hat build of Keycloak CORS(Cross-Origin Resource Sharing) 지원을 활성화합니다.

expose-token

false

true 로 설정하면 인증된 브라우저 클라이언트는 URL root/k_query_bearer_token 을 통해 JavaScript HTTP 호출을 통해 서명된 액세스 토큰을 가져올 수 있습니다. 이는 선택 사항입니다. 이는 Red Hat build of Keycloak에 따라 다릅니다.

ignore-oauth-query-parameter

false

access_token 에 대한 쿼리 매개변수 구문 분석을 비활성화합니다.

principal-attribute

 

ID 토큰에서 주체로 사용할 클레임 값을 지정합니다.

provider-url

 

OpenID 공급자 URL을 지정합니다.

proxy-url

 

HTTP 프록시를 사용하는 경우 HTTP 프록시의 URL을 지정합니다.

realm-public-key

 

영역의 공개 키를 지정합니다.

register-node-at-startup

false

true 로 설정하면 등록 요청이 Red Hat build of Keycloak로 전송됩니다. 이 속성은 애플리케이션이 클러스터형 경우에만 유용합니다.

register-node-period

 

노드를 다시 등록할 빈도를 지정합니다.

socket-timeout-millis

 

데이터를 기다리는 소켓 시간 제한을 밀리초 단위로 지정합니다.

ssl-required

external

OpenID 공급자와의 통신이 HTTPS를 사용해야 하는지 여부를 지정합니다. 값은 다음 중 하나일 수 있습니다.

  • 모든 - 모든 통신은 HTTPS를 통해 수행됩니다.
  • 외부 - 외부 클라이언트와의 통신만 HTTP를 통해 수행됩니다.
  • none - HTTP가 사용되지 않습니다.

token-signature-algorithm

RS256

OpenID 공급자가 사용하는 토큰 서명 알고리즘을 지정합니다. 지원되는 알고리즘은 다음과 같습니다.

  • RS256
  • RS384
  • RS512
  • ES256
  • ES384
  • ES512

token-store

 

인증 세션 데이터의 쿠키 또는 세션 스토리지를 지정합니다.

truststore

 

클라이언트 HTTPS 요청에 사용되는 truststore를 지정합니다.

truststore-password

 

truststore 암호를 지정합니다.

verify-token-audience

false

true 로 설정하면 전달자 전용 인증 중에 토큰에 이 클라이언트 이름(리소스)이 대상자로 포함되어 있는지 확인합니다.

표 5.3. secure-deployment 속성

속성기본값설명

allow-any-hostname

false

값을 true 로 설정하면 OpenID 공급자와 통신할 때 호스트 이름 확인을 건너뜁니다. 이 기능은 테스트할 때 유용합니다. 프로덕션 환경에서 이를 셰이 으로 설정하지 마십시오.

always-refresh-token

 

true 로 설정하면 JBoss EAP가 모든 웹 요청에서 토큰을 새로 고칩니다.

auth-server-url

 

Keycloak 영역 권한 부여 서버의 Red Hat 빌드의 기본 URL입니다. 또는 provider-url 특성을 사용할 수 있습니다.

autodetect-bearer-only

false

베어러 전용 요청을 자동으로 감지할지 여부를 설정합니다. 전달자 전용 요청이 수신되고 autodetect-bearer-onlytrue 로 설정되면 애플리케이션이 브라우저 로그인에 참여할 수 없습니다.

bearer-only

false

Bearer 토큰 인증으로 애플리케이션을 보호하려면 이 값을 true 로 설정합니다. 전달자 토큰 인증이 활성화되면 사용자는 로그인할 OpenID 공급자로 리디렉션되지 않습니다. 대신 elytron-oidc-client 하위 시스템에서 사용자의 전달자 토큰을 확인하려고 합니다.

client-id

 

OpenID 공급자에 등록된 클라이언트의 고유 식별자입니다.

client-key-password

 

client-keystore 를 지정하는 경우 이 속성에 암호를 지정합니다.

client-keystore

 

애플리케이션이 HTTPS를 통해 OpenID 공급자와 통신하는 경우 이 속성의 클라이언트 키 저장소 경로를 설정합니다.

client-keystore-password

 

클라이언트 키 저장소를 지정하는 경우 이 속성에서 액세스하기 위한 암호를 제공합니다.

confidential-port

8443

OpenID 공급자가 사용하는 기밀 포트(SSL/TLS)를 지정합니다.

connection-pool-size

 

OpenID 공급자와 통신할 때 사용할 연결 풀 크기를 지정합니다.

connection-timeout-millis

-1L

원격 호스트와의 연결을 밀리초 단위로 설정하기 위한 시간 제한을 지정합니다. 최소는 -1L 이고 최대 2147483647L 입니다. -1L 은 값이 정의되지 않음, 이는 기본값임을 나타냅니다.

connection-ttl-millis

-1L

연결을 활성 상태로 유지하는 데 걸리는 시간(밀리초)을 지정합니다. 최소값은 -1L 이고 최대 2147483647L 입니다. -1L은 값이 정의되지 않음을 나타냅니다. 기본값은 undefined입니다.

cors-allowed-headers

 

CORS(Cross-Origin Resource Sharing)가 활성화된 경우 Access-Control-Allow-Headers 헤더 값을 설정합니다. 쉼표로 구분된 문자열이어야 합니다. 이는 선택 사항입니다. 설정되지 않은 경우 이 헤더는 CORS 응답에서 반환되지 않습니다.

CORS-allowed-methods

 

CORS(Cross-Origin Resource Sharing)가 활성화된 경우 Access-Control-Allow-Methods 헤더 값을 설정합니다. 쉼표로 구분된 문자열이어야 합니다. 이는 선택 사항입니다. 설정되지 않은 경우 이 헤더는 CORS 응답에서 반환되지 않습니다.

cors-exposed-headers

 

CORS(Cross-Origin Resource Sharing)가 활성화된 경우 Access-Control-Expose-Headers 헤더 값을 설정합니다. 쉼표로 구분된 문자열이어야 합니다. 이는 선택 사항입니다. 설정되지 않은 경우 이 헤더는 CORS 응답에서 반환되지 않습니다.

cors-max-age

 

CORS(Cross-Origin Resource Sharing) Max-Age 헤더 값을 설정합니다. 값은 -1L2147483647L 사이일 수 있습니다. 이 속성은 enable-corstrue 로 설정된 경우에만 적용됩니다.

인증 정보

 

OpenID 공급자와 통신하는 데 사용할 인증 정보를 지정합니다.

disable-trust-manager

 

HTTPS를 통해 OpenID 공급자와 통신할 때 신뢰 관리자를 사용할지 여부를 지정합니다.

enable-cors

false

Red Hat build of Keycloak CORS(Cross-Origin Resource Sharing) 지원을 활성화합니다.

enable-basic-auth

false

기본 인증을 활성화하여 전달자 토큰을 가져오는 데 사용할 자격 증명을 지정합니다.

expose-token

false

true 로 설정하면 인증된 브라우저 클라이언트는 URL root/k_query_bearer_token 을 통해 JavaScript HTTP 호출을 통해 서명된 액세스 토큰을 가져올 수 있습니다. 이는 선택 사항입니다. Red Hat build of Keycloak에 따라 다릅니다.

ignore-oauth-query-parameter

false

access_token 에 대한 쿼리 매개변수 구문 분석을 비활성화합니다.

min-time-between-jwks-requests

  하위 시스템에서 알 수 없는 공개 키로 서명된 토큰을 감지하면 JBoss EAP는 elytron-oidc-client 서버에서 새 공개 키를 다운로드하려고 합니다. 속성은 JBoss EAP가 후속 다운로드 시도 전에 대기하는 간격(초)을 지정합니다. 값은 -1L2147483647L 사이일 수 있습니다.

principal-attribute

 

ID 토큰에서 주체로 사용할 클레임 값을 지정합니다.

provider

 

OpenID 공급자를 지정합니다.

provider-url

 

OpenID 공급자 URL을 지정합니다.

proxy-url

 

HTTP 프록시를 사용하는 경우 HTTP 프록시의 URL을 지정합니다.

public-client

false

true 로 설정하면 OpenID 공급자와 통신할 때 클라이언트 인증 정보가 전송되지 않습니다. 이는 선택 사항입니다.

realm

 

Red Hat build of Keycloak에서 연결할 영역입니다.

realm-public-key

 

OpenID 공급자의 공개 키를 PEM 형식으로 지정합니다.

redirect-rewrite-rule

 

리디렉션 URI에 적용할 재작성 규칙을 지정합니다.

register-node-at-startup

false

true 로 설정하면 등록 요청이 Red Hat build of Keycloak로 전송됩니다. 이 속성은 애플리케이션이 클러스터형 경우에만 유용합니다.

register-node-period

 

노드를 초 단위로 다시 등록하는 빈도를 지정합니다.

resource

 

OIDC를 사용하여 보안하는 애플리케이션의 이름을 지정합니다. 또는 client-id 를 지정할 수 있습니다.

socket-timeout-millis

 

데이터를 기다리는 소켓 시간 제한을 밀리초 단위로 지정합니다.

ssl-required

external

OpenID 공급자와의 통신이 HTTPS를 사용해야 하는지 여부를 지정합니다. 값은 다음 중 하나일 수 있습니다.

  • 모든 - 모든 통신은 HTTPS를 통해 수행됩니다.
  • 외부 - 외부 클라이언트와의 통신만 HTTP를 통해 수행됩니다.
  • none - HTTP가 사용되지 않습니다.

token-minimum-time-to-live

 

어댑터는 현재 토큰이 만료되거나 초 단위로 설정된 시간 내에 만료되는 경우 토큰을 새로 고칩니다.

token-signature-algorithm

RS256

OpenID 공급자가 사용하는 토큰 서명 알고리즘을 지정합니다. 지원되는 알고리즘은 다음과 같습니다.

  • RS256
  • RS384
  • RS512
  • ES256
  • ES384
  • ES512

token-store

 

인증 세션 데이터의 쿠키 또는 세션 스토리지를 지정합니다.

truststore

 

어댑터 클라이언트 HTTPS 요청에 사용되는 truststore를 지정합니다.

truststore-password

 

truststore 암호를 지정합니다.

turn-off-change-session-id-on-login

false

세션 ID는 로그인 성공 시 기본적으로 변경됩니다. 이 기능을 비활성화하려면 값을 true 로 설정합니다.

use-resource-role-mappings

false

토큰에서 가져온 리소스 수준 권한을 사용합니다.

verify-token-audience

표 5.4. secure-server 속성

속성기본값설명

adapter-state-cookie-path

 

설정된 경우 하위 시스템에서 설정한 쿠키에서 사용하는 경로를 정의합니다. 설정하지 않으면"" 가 경로로 사용됩니다.

allow-any-hostname

false

값을 true 로 설정하면 OpenID 공급자와 통신할 때 호스트 이름 확인을 건너뜁니다. 이 기능은 테스트할 때 유용합니다. 프로덕션 환경에서는 이 값을 true 로 설정하지 마십시오.

always-refresh-token

 

true 로 설정하면 애플리케이션이 웹 요청을 수신할 때마다 토큰을 새로고침하고 새 액세스 토큰을 가져오도록 OpenID 공급자에게 새 요청을 보냅니다.

auth-server-url-for-backend-requests

 

로드 밸런서 또는 역방향 프록시를 통과하지 않고도 백엔드 요청에서만 OpenID 공급자를 호출할 URL을 지정합니다.

auth-server-url

 

Keycloak 영역 권한 부여 서버의 Red Hat 빌드의 기본 URL입니다. 또는 provider-url 특성을 사용할 수 있습니다.

autodetect-bearer-only

false

베어러 전용 요청을 자동으로 감지할지 여부를 설정합니다.

전달자 전용 요청이 수신되고 autodetect-bearer-onlytrue 로 설정되면 애플리케이션이 브라우저 로그인에 참여할 수 없습니다.

이 속성을 사용하여 X-Requested-with, CryostatAction 또는 Accept 와 같은 헤더를 기반으로 SOAP (Simple Object Access Protocol) 또는 REST 클라이언트를 자동으로 감지합니다.

bearer-only

false

Bearer 토큰 인증으로 애플리케이션을 보호하려면 이 값을 true 로 설정합니다.

전달자 토큰 인증이 활성화되면 사용자는 로그인할 OpenID 공급자로 리디렉션되지 않습니다. 대신 elytron-oidc-client 하위 시스템에서 사용자의 전달자 토큰을 확인하려고 합니다.

client-id

 

OpenID 공급자에 등록된 클라이언트의 고유 식별자입니다.

client-key-password

 

client-keystore 를 지정하는 경우 이 속성에 암호를 지정합니다.

client-keystore-password

 

클라이언트 키 저장소를 지정하는 경우 이 속성에서 액세스하기 위한 암호를 제공합니다.

client-keystore

 

HTTPS를 통해 OpenID 공급자와 통신할 때 이 속성의 클라이언트 키 저장소 경로를 설정합니다.

confidential-port

8443

OpenID 공급자가 사용하는 기밀 포트(SSL/TLS)를 지정합니다.

connection-pool-size

 

OpenID 공급자와 통신할 때 사용할 연결 풀 크기를 지정합니다.

connection-timeout-millis

-1L

원격 호스트와의 연결을 밀리초 단위로 설정하기 위한 시간 제한을 지정합니다. 최소는 -1L 이고 최대 2147483647L 입니다. -1L 은 값이 정의되지 않음, 이는 기본값임을 나타냅니다.

connection-ttl-millis

-1L

연결을 활성 상태로 유지하는 데 걸리는 시간(밀리초)을 지정합니다. 최소값은 -1L 이고 최대 2147483647L 입니다. -1L은 값이 정의되지 않음을 나타냅니다. 기본값은 undefined입니다.

cors-allowed-headers

 

CORS(Cross-Origin Resource Sharing)가 활성화된 경우 Access-Control-Allow-Headers 헤더 값을 설정합니다. 쉼표로 구분된 문자열이어야 합니다. 이는 선택 사항입니다. 설정되지 않은 경우 이 헤더는 CORS 응답에서 반환되지 않습니다.

CORS-allowed-methods

 

CORS(Cross-Origin Resource Sharing)가 활성화된 경우 Access-Control-Allow-Methods 헤더 값을 설정합니다. 쉼표로 구분된 문자열이어야 합니다. 이는 선택 사항입니다. 설정되지 않은 경우 이 헤더는 CORS 응답에서 반환되지 않습니다.

cors-exposed-headers

 

CORS(Cross-Origin Resource Sharing)가 활성화된 경우 Access-Control-Expose-Headers 헤더 값을 설정합니다. 쉼표로 구분된 문자열이어야 합니다. 이는 선택 사항입니다. 설정되지 않은 경우 이 헤더는 CORS 응답에서 반환되지 않습니다.

cors-max-age

 

CORS(Cross-Origin Resource Sharing) Max-Age 헤더 값을 설정합니다. 값은 -1L2147483647L 사이일 수 있습니다. 이 속성은 enable-corstrue 로 설정된 경우에만 적용됩니다.

인증 정보

 

OpenID 공급자와 통신하는 데 사용할 인증 정보를 지정합니다.

disable-trust-manager

 

HTTPS를 통해 OpenID 공급자와 통신할 때 신뢰 관리자를 사용할지 여부를 지정합니다.

enable-basic-auth

false

기본 인증을 활성화하여 전달자 토큰을 가져오는 데 사용할 자격 증명을 지정합니다.

enable-cors

false

Red Hat build of Keycloak CORS(Cross-Origin Resource Sharing) 지원을 활성화합니다.

expose-token

false

true 로 설정하면 인증된 브라우저 클라이언트는 URL root/k_query_bearer_token 을 통해 JavaScript HTTP 호출을 통해 서명된 액세스 토큰을 가져올 수 있습니다. 이는 선택 사항입니다. Red Hat build of Keycloak에 따라 다릅니다.

ignore-oauth-query-parameter

false

access_token 에 대한 쿼리 매개변수 구문 분석을 비활성화합니다.

min-time-between-jwks-requests

 

하위 시스템에서 알 수 없는 공개 키로 서명된 토큰을 감지하면 JBoss EAP는 elytron-oidc-client 서버에서 새 공개 키를 다운로드하려고 합니다. 그러나 이 속성에 설정한 값(초)보다 적은 시간 내에 이미 시도한 경우 JBoss EAP가 새 공개 키를 다운로드하려고 시도하지 않습니다. 값은 -1L2147483647L 사이일 수 있습니다.

principal-attribute

 

ID 토큰에서 주체로 사용할 클레임 값을 지정합니다.

principal-attribute

 

ID 토큰의 클레임 값을 ID의 주체로 사용할지 지정합니다.

provider

 

OpenID 공급자를 지정합니다.

provider-url

 

OpenID 공급자 URL을 지정합니다.

proxy-url

 

HTTP 프록시를 사용하는 경우 HTTP 프록시의 URL을 지정합니다.

public-client

false

true 로 설정하면 OpenID 공급자와 통신할 때 클라이언트 인증 정보가 전송되지 않습니다. 이는 선택 사항입니다.

public-key-cache-ttl

 

새 공개 키를 검색하기 위한 두 요청 사이의 최대 간격(초)입니다.

realm-public-key

 

OpenID 공급자의 공개 키를 PEM 형식으로 지정합니다.

realm

 

Red Hat build of Keycloak에서 연결할 영역입니다.

redirect-rewrite-rule

 

리디렉션 URI에 적용할 재작성 규칙을 지정합니다.

register-node-at-startup

false

true 로 설정하면 등록 요청이 Red Hat build of Keycloak로 전송됩니다. 이 속성은 애플리케이션이 클러스터형 경우에만 유용합니다.

register-node-period

 

노드를 초 단위로 다시 등록하는 빈도를 지정합니다.

resource

 

OIDC를 사용하여 보안하는 애플리케이션의 이름을 지정합니다. 또는 client-id 를 지정할 수 있습니다.

socket-timeout-millis

 

데이터를 기다리는 소켓 시간 제한을 밀리초 단위로 지정합니다.

ssl-required

external

OpenID 공급자와의 통신이 HTTPS를 사용해야 하는지 여부를 지정합니다. 값은 다음 중 하나일 수 있습니다.

  • 모든 - 모든 통신은 HTTPS를 통해 수행됩니다.
  • 외부 - 외부 클라이언트와의 통신만 HTTP를 통해 수행됩니다.
  • none - HTTP가 사용되지 않습니다.

token-minimum-time-to-live

 

어댑터는 현재 토큰이 만료되거나 초 단위로 설정된 시간 내에 만료되는 경우 토큰을 새로 고칩니다.

token-signature-algorithm

RS256

OpenID 공급자가 사용하는 토큰 서명 알고리즘을 지정합니다. 지원되는 알고리즘은 다음과 같습니다.

  • RS256
  • RS384
  • RS512
  • ES256
  • ES384
  • ES512

token-store

 

인증 세션 데이터의 쿠키 또는 세션 스토리지를 지정합니다.

truststore-password

 

truststore 암호를 지정합니다.

truststore

 

어댑터 클라이언트 HTTPS 요청에 사용되는 truststore를 지정합니다.

turn-off-change-session-id-on-login

false

세션 ID는 로그인 성공 시 기본적으로 변경됩니다. 이 기능을 비활성화하려면 값을 true 로 설정합니다.

use-resource-role-mappings

false

토큰에서 가져온 리소스 수준 권한을 사용합니다.

verify-token-audience

false

true 로 설정된 경우 전달자 전용 인증 중에 어댑터는 토큰에 이 클라이언트 이름(리소스)이 대상자로 포함되어 있는지 확인합니다.

표 5.5. realm 속성

속성기본값설명

allow-any-hostname

false

값을 true 로 설정하면 OpenID 공급자와 통신할 때 호스트 이름 확인을 건너뜁니다. 이 기능은 테스트할 때 유용합니다. 프로덕션 환경에서 이를 셰이 으로 설정하지 마십시오.

always-refresh-token

 

true 로 설정하면 애플리케이션이 웹 요청을 수신할 때마다 토큰을 새로고침하고 새 액세스 토큰을 가져오도록 OpenID 공급자에게 새 요청을 보냅니다.

auth-server-url

 

Keycloak 영역 권한 부여 서버의 Red Hat 빌드의 기본 URL입니다. 또는 provider-url 특성을 사용할 수 있습니다.

autodetect-bearer-only

false

베어러 전용 요청을 자동으로 감지할지 여부를 설정합니다. 전달자 전용 요청이 수신되고 autodetect-bearer-onlytrue 로 설정되면 애플리케이션이 브라우저 로그인에 참여할 수 없습니다.

client-key-password

 

client-keystore 를 지정하는 경우 이 속성에서 암호를 지정합니다.

client-keystore

 

애플리케이션이 HTTPS를 통해 OpenID 공급자와 통신하는 경우 이 속성의 클라이언트 키 저장소 경로를 설정합니다.

client-keystore-password

 

클라이언트 키 저장소를 지정하는 경우 이 속성에서 액세스하기 위한 암호를 제공합니다.

confidential-port

8443

Red Hat build of Keycloak에서 사용하는 기밀 포트(SSL/TLS)를 지정합니다.

connection-pool-size

 

Red Hat build of Keycloak과 통신할 때 사용할 연결 풀 크기를 지정합니다.

connection-timeout-millis

-1L

원격 호스트와의 연결을 밀리초 단위로 설정하기 위한 시간 제한을 지정합니다. 최소는 -1L 이고 최대 2147483647L 입니다. -1L 은 값이 정의되지 않음, 이는 기본값임을 나타냅니다.

connection-ttl-millis

-1L

연결을 활성 상태로 유지하는 데 걸리는 시간(밀리초)을 지정합니다. 최소는 -1L 이고 최대 2147483647L 입니다. -1L 은 값이 정의되지 않음, 이는 기본값임을 나타냅니다.

cors-allowed-headers

 

CORS(Cross-Origin Resource Sharing)가 활성화된 경우 Access-Control-Allow-Headers 헤더 값을 설정합니다. 쉼표로 구분된 문자열이어야 합니다. 이는 선택 사항입니다. 설정되지 않은 경우 이 헤더는 CORS 응답에서 반환되지 않습니다.

CORS-allowed-methods

 

CORS(Cross-Origin Resource Sharing)가 활성화된 경우 Access-Control-Allow-Methods 헤더 값을 설정합니다. 쉼표로 구분된 문자열이어야 합니다. 이는 선택 사항입니다. 설정되지 않은 경우 이 헤더는 CORS 응답에서 반환되지 않습니다.

cors-exposed-headers

 

CORS(Cross-Origin Resource Sharing)가 활성화된 경우 Access-Control-Expose-Headers 헤더 값을 설정합니다. 쉼표로 구분된 문자열이어야 합니다. 이는 선택 사항입니다. 설정되지 않은 경우 이 헤더는 CORS 응답에서 반환되지 않습니다.

cors-max-age

 

CORS(Cross-Origin Resource Sharing) Max-Age 헤더 값을 설정합니다. 값은 -1L2147483647L 사이일 수 있습니다. 이 속성은 enable-corstrue 로 설정된 경우에만 적용됩니다.

disable-trust-manager

 

HTTPS를 통해 OpenID 공급자와 통신할 때 신뢰 관리자를 사용할지 여부를 지정합니다.

enable-cors

false

Red Hat build of Keycloak CORS(Cross-Origin Resource Sharing) 지원을 활성화합니다.

expose-token

false

true 로 설정하면 인증된 브라우저 클라이언트는 URL root/k_query_bearer_token 을 통해 JavaScript HTTP 호출을 통해 서명된 액세스 토큰을 가져올 수 있습니다. 이는 선택 사항입니다.

ignore-oauth-query-parameter

false

access_token 에 대한 쿼리 매개변수 구문 분석을 비활성화합니다.

principal-attribute

 

ID 토큰에서 주체로 사용할 클레임 값을 지정합니다.

provider-url

 

OpenID 공급자 URL을 지정합니다.

proxy-url

 

HTTP 프록시를 사용하는 경우 HTTP 프록시의 URL을 지정합니다.

realm-public-key

 

영역의 공개 키를 지정합니다.

register-node-at-startup

false

true 로 설정하면 등록 요청이 Red Hat build of Keycloak로 전송됩니다. 이 속성은 애플리케이션이 클러스터형 경우에만 유용합니다.

register-node-period

 

노드를 다시 등록할 빈도를 지정합니다.

socket-timeout-millis

 

데이터를 기다리는 소켓 시간 제한을 밀리초 단위로 지정합니다.

ssl-required

external

OpenID 공급자와의 통신이 HTTPS를 사용해야 하는지 여부를 지정합니다. 값은 다음 중 하나일 수 있습니다.

  • 모든 - 모든 통신은 HTTPS를 통해 수행됩니다.
  • 외부 - 외부 클라이언트와의 통신만 HTTP를 통해 수행됩니다.
  • none - HTTP가 사용되지 않습니다.

token-signature-algorithm

RS256

OpenID 공급자가 사용하는 토큰 서명 알고리즘을 지정합니다. 지원되는 알고리즘은 다음과 같습니다.

  • RS256
  • RS384
  • RS512
  • ES256
  • ES384
  • ES512

token-store

 

인증 세션 데이터의 쿠키 또는 세션 스토리지를 지정합니다.

truststore

 

클라이언트 HTTPS 요청에 사용되는 truststore를 지정합니다.

truststore-password

 

truststore 암호를 지정합니다.

verify-token-audience

false

true 로 설정된 경우 전달자 전용 인증 중에 어댑터는 토큰에 이 클라이언트 이름(리소스)이 대상자로 포함되어 있는지 확인합니다.

5.2. security-domain 속성

속성을 설정하여 security-domain 을 구성할 수 있습니다.

속성설명

default-realm

이 보안 도메인에 포함된 기본 영역입니다.

evidence-decoder

이 도메인에서 사용할 EvidenceDecoder에 대한 참조입니다.

outflow-anonymous

이 속성은 다음 시나리오에서 발생하는 익명 ID를 보안 도메인에 대한 outflow를 사용할 수 없는지 여부를 지정합니다.

  • 이 도메인을 신뢰하지 않습니다.
  • 도메인에 축소되는 ID는 해당 도메인에 존재하지 않습니다.

익명 ID는 해당 도메인에 대해 이전에 설정한 ID를 지웁니다.

outflow-security-domains

이 도메인의 보안 ID가 자동으로 흐름을 해제해야 하는 보안 도메인 목록입니다.

permission-mapper

이 도메인에서 사용할 PermissionMapper에 대한 참조입니다.

post-realm-principal-transformer

제공된 ID 이름에서 작동한 후 적용할 주요 변환기에 대한 참조입니다.

pre-realm-principal-transformer

영역을 선택하기 전에 적용할 주체 변환기에 대한 참조입니다.

principal-decoder

이 도메인에서 사용할 PrincipalDecoder에 대한 참조입니다.

realm-mapper

이 도메인에서 사용할 CryostatMapper에 대한 참조입니다.

realms

이 보안 도메인에 포함된 영역 목록입니다.

role-decoder

이 도메인에서 사용할 RoleDecoder에 대한 참조입니다.

role-mapper

이 도메인에서 사용할 RoleMapper에 대한 참조입니다.

security-event-listener

보안 이벤트에 대한 리스너에 대한 참조입니다.

trusted-security-domains

이 보안 도메인에서 신뢰하는 보안 도메인의 목록입니다.

trusted-virtual-security-domains

이 보안 도메인에서 신뢰하는 가상 보안 도메인 목록입니다.

5.3. virtual-security-domain 속성

해당 속성을 설정하여 virtual-security-domain 을 구성할 수 있습니다.

표 5.6. virtual-security-domain 속성

속성설명

outflow-anonymous

보안 ID를 보안 도메인에 축소할 수 없는 경우 다음 시나리오에서는 이 특성을 true 로 설정하여 익명 ID로 설정합니다.

  • 이 가상 도메인을 신뢰하지 않습니다.
  • 도메인에 축소되는 ID는 해당 도메인에 존재하지 않습니다.

익명 ID는 해당 도메인에 대해 이미 설정된 모든 ID를 지우는 효과가 있습니다.

기본값은 false입니다.

outflow-security-domains

이 가상 도메인의 보안 ID가 자동으로 로 흐름을 해제해야 하는 보안 도메인 목록입니다.

법적 공지

Copyright © 2024 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.