JBoss EAP에서 SSO(Single Sign-On) 사용
SSO(Single Sign-On) 사용 가이드 JBoss EAP에 배포된 애플리케이션에 인증 추가
초록
JBoss EAP 문서에 대한 피드백 제공
오류를 보고하거나 문서를 개선하기 위해 Red Hat Jira 계정에 로그인하여 문제를 제출하십시오. Red Hat Jira 계정이 없는 경우 계정을 생성하라는 메시지가 표시됩니다.
프로세스
- 티켓을 생성하려면 다음 링크를 클릭하십시오.
- 요약 에 문제에 대한 간략한 설명을 입력합니다.
- 설명에서 문제 또는 개선 사항에 대한 자세한 설명을 제공합니다. 문서에서 문제가 발생한 위치에 URL을 포함합니다.
- 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 6749 및 RFC 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를 사용하여 애플리케이션을 보호하려면 다음 절차를 따르십시오.
- Single Sign-On으로 보호할 예제 애플리케이션을 생성합니다. 이 절차를 사용하여 SSO로 보안을 위한 간단한 웹 애플리케이션을 생성합니다. SSO로 보호할 애플리케이션이 이미 있는 경우 이 단계를 건너뜁니다.
- Red Hat build of Keycloak에서 영역 및 사용자 생성
OIDC 또는 SAML을 프로토콜로 사용하여 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 배포를 위한 애플리케이션 개발 시작하기 를 참조하십시오.
사전 요구 사항
- Maven이 설치되어 있어야 합니다. 자세한 내용은 Apache Maven 다운로드를 참조하십시오.
프로세스
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
애플리케이션 루트 디렉터리로 이동합니다.
구문
$ cd <name-of-your-application>
예제
$ cd simple-webapp-example
생성된
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" 텍스트를 반환합니다.
이 절차에서 < ;application_home >은 애플리케이션의 pom.xml
구성 파일이 포함된 디렉터리를 나타냅니다.
사전 요구 사항
Maven 프로젝트를 생성했습니다.
자세한 내용은 웹 애플리케이션 개발을 위한 Maven 프로젝트 생성 을 참조하십시오.
- JBoss EAP가 실행 중입니다.
프로세스
Java 파일을 저장할 디렉터리를 만듭니다.
구문
$ mkdir -p src/main/java/<path_based_on_artifactID>
예제
$ mkdir -p src/main/java/com/example/app
새 디렉터리로 이동합니다.
구문
$ cd src/main/java/<path_based_on_artifactID>
예제
$ cd src/main/java/com/example/app
다음 콘텐츠를 사용하여
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>"); } } }
애플리케이션 루트 디렉터리에서 다음 명령을 사용하여 애플리케이션을 컴파일합니다.
$ mvn package ... [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.015 s [INFO] Finished at: 2022-04-28T17:48:53+05:30 [INFO] ------------------------------------------------------------------------
애플리케이션을 배포합니다.
$ 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에 대한 관리자 액세스 권한이 있습니다.
프로세스
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
-
http://localhost:<port>/
에서 관리 콘솔에 로그인합니다. 예:http://localhost:8180/
. 영역을 생성합니다.
- 마스터 위로 마우스를 가져가면 Create Cryostat를 클릭합니다.
-
영역의 이름을 입력합니다. 예를 들면
example_realm
입니다. - Enabled 가 ON 으로 설정되어 있는지 확인합니다.
- 생성을 클릭합니다.
자세한 내용은 Keycloak 서버 관리 가이드의 Red Hat 빌드에서 영역 생성 을 참조하십시오.
사용자를 생성합니다.
- 사용자를 클릭한 다음 사용자 추가 를 클릭합니다.
-
사용자 이름을 입력합니다. 예를 들면
user1
입니다. - 생성을 클릭합니다.
자세한 내용은 Keycloak 서버 관리 가이드의 Red Hat 빌드에서 사용자 생성 을 참조하십시오.
사용자의 자격 증명을 설정합니다.
- 인증 정보를 클릭합니다.
-
사용자의 암호를 설정합니다. 예를 들면
passwordUser1
입니다. 임시 를 OFF 로 전환하고 암호 설정을 클릭합니다. 확인 프롬프트에서 저장을 클릭합니다.
자세한 내용은 Red Hat build of Keycloak Server Administration Guide에서 사용자 인증 정보 정의를 참조하십시오.
역할을 생성합니다.
이는 JBoss EAP에서 권한 부여를 위해 구성하는 역할 이름입니다.
- Cryo stat 역할을 클릭한 다음 역할 생성을 클릭합니다.
- 관리자와 같은 역할 이름을 입력합니다.
- 저장을 클릭합니다.
사용자에게 역할을 할당합니다.
- 사용자를 클릭합니다.
- 역할을 할당할 사용자를 클릭합니다.
- 역할 매핑 을 클릭합니다.
- 역할 할당 을 클릭합니다.
- 할당할 역할을 선택합니다. 예를 들어 관리자. Assign 을 클릭합니다.
자세한 내용은 Keycloak 서버 관리 가이드의 Red Hat 빌드에서 영역 역할 생성 을 참조하십시오.
다음 단계
이 영역을 사용하여 JBoss EAP에 배포된 애플리케이션을 보호하려면 다음 절차를 따르십시오.
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 } }
하위 시스템 구성
다음과 같은 방법으로 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>
동일한 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>
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 클라이언트 관리를 참조하십시오.
사전 요구 사항
Keycloak의 Red Hat 빌드에서 영역 및 정의된 사용자를 생성했습니다.
자세한 내용은 JBoss EAP에서 영역 및 사용자 생성을 참조하십시오.
프로세스
- Red Hat build of Keycloak Admin Console으로 이동합니다.
클라이언트를 생성합니다.
- 클라이언트 를 클릭한 다음 클라이언트 생성을 클릭합니다.
-
Client 유형이
OpenID Connect
로 설정되어 있는지 확인합니다. -
클라이언트 ID를 입력합니다. 예를 들면
jbeap-oidc
입니다. - 다음을 클릭합니다.
- 기능 구성 탭에서 인증 흐름이 표준 흐름 및 직접 액세스 권한 부여 로 설정되어 있는지 확인합니다.
- 다음을 클릭합니다.
-
로그인 설정 탭에서 Valid redirect URI 값을 입력합니다. 인증이 성공한 후 페이지를 리디렉션해야 하는 URL을 입력합니다(예:
http://localhost:8080/simple-webapp-example/secured/*
). - 저장을 클릭합니다.
어댑터 구성을 확인합니다.
- 작업을 클릭한 다음 어댑터 구성 다운로드를 클릭합니다.
연결 매개 변수를 보려면 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에 애플리케이션을 배포했습니다.
프로세스
애플리케이션 리소스를 보호하도록 애플리케이션의
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
의 값으로 사용합니다.
OpenID Connect로 애플리케이션을 보호하려면 배포 구성을 업데이트하거나
elytron-oidc-client
하위 시스템을 구성합니다.참고배포 구성 및
elytron-oidc-client
하위 시스템에서 OpenID Connect를 구성하는 경우elytron-oidc-client
하위 시스템의 구성이 애플리케이션배포
설명자의 구성보다 우선합니다.배포 구성 업데이트.
인증 방법을 OIDC로 지정하는 애플리케이션의
web.xml
에 로그인 구성을 추가합니다.<web-app> ... <login-config> <auth-method>OIDC</auth-method> 1 </login-config> ... </web-app>
- 1
- OIDC를 사용하여 애플리케이션을 보호합니다.
다음과 같이
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)
애플리케이션 루트 디렉터리에서 다음 명령을 사용하여 애플리케이션을 컴파일합니다.
$ mvn package
애플리케이션을 배포합니다.
$ mvn wildfly:deploy
검증
브라우저에서
http://localhost:8080/simple-webapp-example/secured
로 이동합니다.Red Hat build of Keycloak 로그인 페이지로 리디렉션됩니다.
- 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 공급자로 사용합니다.
다음 표에서는 각 계층의 사용 사례를 설명합니다.
계층 | 적용 가능 | 설명 |
---|---|---|
| OpenShift |
SAML 클라이언트의 자동 등록과 함께 Source to Image(s2i)에 이 계층을 사용합니다. 이 계층을 |
| 베어 메탈, OpenShift |
베어 메탈의 웹 애플리케이션 및 CLI 스크립트에서 또는 배포 구성에서 |
| 베어 메탈 | 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 디렉토리에
이라는 파일을 만듭니다. SAML 공급자에서 이 파일을 가져올 수 있습니다.keycloak-
saml.xmlkeycloak-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>
PrivateKeyPem
및CertificatePem
의 값은 각 클라이언트에 대해 고유합니다.
하위 시스템 구성
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 클라이언트 생성 을 참조하십시오.
사전 요구 사항
Keycloak의 Red Hat 빌드에서 영역 및 정의된 사용자를 생성했습니다.
자세한 내용은 JBoss EAP에서 영역 및 사용자 생성을 참조하십시오.
프로세스
- Red Hat build of Keycloak Admin Console으로 이동합니다.
클라이언트를 생성합니다.
- 클라이언트 를 클릭한 다음 클라이언트 생성을 클릭합니다.
- SAML 을 클라이언트 유형으로 선택합니다.
보안할 애플리케이션의 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
-
클라이언트 이름을 입력합니다. 예를 들면
jbeap-saml
입니다. - 다음을 클릭합니다.
다음 정보를 입력합니다.
-
루트 URL: 애플리케이션의 URL입니다(예:
http://localhost:8080/simple-webapp-example/
). 홈 URL: 애플리케이션의 URL입니다(예:
http://localhost:8080/simple-webapp-example/
).중요Home URL을 설정하지 않으면 클라이언트 구성의
SP entityID
가 비어 있고 오류가 발생합니다.관리 CLI 명령을 사용하는 경우 다음과 같은 오류가 발생합니다.
Can't reset to root in the middle of the path @72
각 구성 파일에서
SP entityID
값을 정의하여 오류를 해결할 수 있습니다.-
유효한 리디렉션 URI: 사용자가 로그인한 후 허용되는 URI입니다(예:
http://localhost:8080/simple-webapp-example/secured/*
). 마스터 SAML 처리 URL: 애플리케이션의 URL 다음에
saml
를 사용합니다. 예:http://localhost:8080/simple-webapp-example/saml
.중요URL에
saml
를 추가하지 않으면 리디렉션 오류가 발생합니다.자세한 내용은 SAML 클라이언트 생성을 참조하십시오.
-
루트 URL: 애플리케이션의 URL입니다(예:
이제 구성된 클라이언트를 사용하여 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
하위 시스템을 구성하여 다음을 수행합니다.애플리케이션 배포에 구성을 추가하지 않으려면 이 방법을 사용합니다.
배포 구성 업데이트
서버에 구성을 추가하지 않고 구성을 애플리케이션 배포 내에 유지하려는 경우 이 방법을 사용합니다.
사전 요구 사항
SAML 클라이언트가 Keycloak의 Red Hat 빌드에 생성되었습니다.
자세한 내용은 Keycloak의 Red Hat 빌드에서 SAML 클라이언트 생성 을 참조하십시오.
JBoss EAP는
jboss-eap-installation-manager
를 사용하여 설치되었습니다.자세한 내용은 Red Hat JBoss Enterprise Application Platform 설치 방법 가이드의
jboss-eap-installation-manager
를 사용하여 JBoss EAP 8.0 설치를 참조하십시오.
프로세스
jboss-eap-installation-manager
를 사용하여 필요한 Keycloak SAML 어댑터 계층을 서버에 추가합니다. 다음은 사용 가능한 계층의 세부 정보입니다.-
기능 팩:
org.keycloak:keycloak-saml-adapter-galleon-pack
. 레이어:
-
Keycloak-client-saml
: 이 계층을 사용하여 서블릿을 보호합니다. Keycloak-client-saml-
Cryostat: 이 계층을 사용하여 서블릿의 ID를 Jakarta Enterprise Cryostat로 전파합니다.JBoss EAP에서 기능 팩 및 계층을 추가하는 방법에 대한 자세한 내용은 Red Hat JBoss Enterprise Application Platform 설치 방법 가이드의 jboss-eap-installation-manager를 사용하여 기존 JBoss EAP 서버에 기능 팩 추가 에서 참조하십시오.
-
-
기능 팩:
애플리케이션 리소스를 보호하도록 애플리케이션의
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
의 값으로 사용합니다.
관리 CLI를 사용하거나 애플리케이션 배포를 업데이트하여 SAML으로 애플리케이션을 보호합니다.
애플리케이션 배포를 업데이트합니다.
인증 방법을 SAML으로 지정하는 애플리케이션의
web.xml
에 로그인 구성을 추가합니다.<web-app> ... <login-config> <auth-method>SAML</auth-method> 1 </login-config> ... </web-app>
- 1
- SAML을 사용하여 애플리케이션을 보호합니다.
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>
PrivateKeyPem
및CertificatePem
의 값은 각 클라이언트에 대해 고유합니다.
관리 CLI 사용.
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#)
PrivateKeyPem
및CertificatePem
의 값은 각 클라이언트에 대해 고유합니다.클라이언트 구성 파일에서 애플리케이션
WAR
의 모든 발생(예:simple-webapp-example.war
)을 업데이트합니다.참고생성된 CLI 스크립트의 두 번째 문 끝에 누락되어 있습니다.
/subsystem=keycloak-saml/secure-deployment=YOUR-WAR.war/SP=""/:add(sslPolicy=EXTERNAL,logoutPage="SPECIFY YOUR LOGOUT PAGE!"
누락된 항목을 추가해야 합니다.
)
관리 CLI를 사용하여
keycloak-saml-subsystem.cli
스크립트를 실행하여 JBoss EAP를 구성합니다.$ <EAP_HOME>/bin/jboss-cli.sh -c --file=<path_to_the_file>/keycloak-saml-subsystem.cli
애플리케이션을 배포합니다.
$ mvn wildfly:deploy
검증
브라우저에서 애플리케이션 URL로 이동합니다. 예:
http://localhost:8080/simple-webapp-example/secured
.Keycloak 로그인 페이지의 Red Hat 빌드로 리디렉션됩니다.
- 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를 다른 보안 도메인으로 비활성화하려면 다음 리소스를 구성해야 합니다.
자세한 내용은 가상 보안 도메인에서 보안 도메인으로 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를 생성했습니다.
프로세스
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()
애플리케이션을 보호하는 데 사용할 가상 보안 도메인 리소스를 참조하는 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과 일치합니다.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를 보호했습니다.
프로세스
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])
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])
서버를 다시 로드합니다.
reload
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이 실행 중입니다.
프로세스
Keycloak 관리 콘솔의 Red Hat 빌드를 사용하여 Keycloak의 Red Hat 빌드에 영역을 만듭니다(예:
example_jboss_infra
). 이 영역을 사용하여 필요한 사용자, 역할 및 클라이언트를 생성합니다.자세한 내용은 영역 생성을 참조하십시오.
사용자를 생성합니다. 예를 들면
user1
입니다.자세한 내용은 사용자 생성 을 참조하십시오.
사용자의 암호를 만듭니다. 예를 들면
passwordUser1
입니다.자세한 내용은 사용자의 암호 설정을 참조하십시오.
역할을 생성합니다. 예를 들면
Administrator
입니다.JBoss EAP에서 RBAC(역할 기반 액세스 제어)를 활성화하려면 이름은
Administrator
와 같은 표준 RBAC 역할 중 하나여야 합니다. JBoss EAP의 RBAC에 대한 자세한 내용은 JBoss EAP 7.4 Security Architecture 가이드의 역할 기반 액세스 제어를 참조하십시오.Keycloak의 Red Hat 빌드에서 역할을 생성하는 방법에 대한 자세한 내용은 영역 역할 생성을 참조하십시오.
사용자에게 역할을 할당합니다.
자세한 내용은 역할 매핑 할당을 참조하십시오.
OpenID Connect 클라이언트를 생성합니다(예:
jboss-console
).다음 기능 구성 값이 선택되어 있는지 확인합니다.
- 표준 흐름
- 직접 액세스 권한 부여
로그인 설정 페이지에서 최소한 다음 속성을 설정합니다.
- 유효한 리디렉션 URI를 관리 콘솔 URI로 설정합니다. 예: http://localhost:9990.
- Web Origins 를 관리 콘솔 URI로 설정합니다. 예: http://localhost:9990.
다른 OpenID Connect 클라이언트(예:
jboss-management
)를 베어러 전용 클라이언트로 생성합니다.기능 구성에서 다음 옵션을 선택 취소합니다.
- 표준 흐름
- 직접 액세스 권한 부여
- 로그인 설정 페이지에서 필드를 지정할 필요가 없습니다.
이제 정의한 클라이언트를 사용하여 JBoss EAP 관리 콘솔을 보호할 수 있습니다. 자세한 내용은 OpenID Connect를 사용하여 JBoss EAP 관리 콘솔 보안 을 참조하십시오.
추가 리소스
4.3. OpenID Connect를 사용하여 JBoss EAP 관리 콘솔 보안
OpenID Connect(OIDC)를 사용하여 JBoss EAP 관리 콘솔을 보호하면 JBoss EAP가 사용자가 관리 콘솔에 로그인할 수 있도록 OIDC 공급자로 리디렉션됩니다.
사전 요구 사항
OIDC 공급자에 필요한 클라이언트를 구성했습니다.
자세한 내용은 Configuring Red Hat build of Keycloak to secure JBoss EAP 관리 콘솔 을 참조하십시오.
프로세스
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)
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)
옵션: 다음 명령을 사용하여 역할 기반 액세스 제어(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)
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
로 지정해야 합니다.
검증
관리 콘솔에 액세스합니다. 기본적으로 관리 콘솔은 http://localhost:9990 에서 사용할 수 있습니다.
OIDC 공급자로 리디렉션됩니다.
- 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 |
|
값을 |
always-refresh-token |
|
|
auth-server-url |
|
Keycloak 영역 권한 부여 서버의 Red Hat 빌드의 기본 URL입니다. 이 속성을 사용하는 경우
또는 |
autodetect-bearer-only |
| 베어러 전용 요청을 자동으로 감지할지 여부를 설정합니다.
전달자 전용 요청이 수신되고
이 속성을 사용하여 |
client-id |
| OpenID 공급자에 등록된 JBoss EAP의 클라이언트 ID입니다. |
client-key-password |
|
|
client-keystore |
| 애플리케이션이 HTTPS를 통해 OpenID 공급자와 통신하는 경우 이 속성의 클라이언트 키 저장소 경로를 설정합니다. |
client-keystore-password |
|
|
confidential-port |
| OpenID 공급자가 사용하는 기밀 포트(SSL/TLS)를 지정합니다. |
connection-pool-size |
| OpenID 공급자와 통신할 때 사용할 연결 풀 크기를 지정합니다. |
connection-timeout-millis |
|
원격 호스트와의 연결을 밀리초 단위로 설정하기 위한 시간 제한을 지정합니다. 최소값은 |
connection-ttl-millis |
|
연결을 활성 상태로 유지하는 데 걸리는 시간(밀리초)을 지정합니다. 최소는 |
cors-allowed-headers |
|
CORS(Cross-Origin Resource Sharing)가 활성화된 경우 |
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 헤더 값을 설정합니다. 값은 |
disable-trust-manager |
| HTTPS를 통해 OpenID 공급자와 통신할 때 신뢰 관리자를 사용할지 여부를 지정합니다. |
enable-cors |
| Red Hat build of Keycloak CORS(Cross-Origin Resource Sharing) 지원을 활성화합니다. |
expose-token |
|
|
ignore-oauth-query-parameter |
|
|
principal-attribute |
| ID 토큰에서 주체로 사용할 클레임 값을 지정합니다. |
provider-url |
| OpenID 공급자 URL을 지정합니다. |
proxy-url |
| HTTP 프록시를 사용하는 경우 HTTP 프록시의 URL을 지정합니다. |
realm-public-key |
| 영역의 공개 키를 지정합니다. |
register-node-at-startup |
|
|
register-node-period |
| 노드를 다시 등록할 빈도를 지정합니다. |
socket-timeout-millis |
| 데이터를 기다리는 소켓 시간 제한을 밀리초 단위로 지정합니다. |
ssl-required |
| OpenID 공급자와의 통신이 HTTPS를 사용해야 하는지 여부를 지정합니다. 값은 다음 중 하나일 수 있습니다.
|
token-signature-algorithm |
| OpenID 공급자가 사용하는 토큰 서명 알고리즘을 지정합니다. 지원되는 알고리즘은 다음과 같습니다.
|
token-store |
| 인증 세션 데이터의 쿠키 또는 세션 스토리지를 지정합니다. |
truststore |
| 클라이언트 HTTPS 요청에 사용되는 truststore를 지정합니다. |
truststore-password |
| truststore 암호를 지정합니다. |
verify-token-audience |
|
|
표 5.3. secure-deployment
속성
속성 | 기본값 | 설명 |
---|---|---|
allow-any-hostname |
|
값을 |
always-refresh-token |
|
|
auth-server-url |
|
Keycloak 영역 권한 부여 서버의 Red Hat 빌드의 기본 URL입니다. 또는 |
autodetect-bearer-only |
|
베어러 전용 요청을 자동으로 감지할지 여부를 설정합니다. 전달자 전용 요청이 수신되고 |
bearer-only |
|
Bearer 토큰 인증으로 애플리케이션을 보호하려면 이 값을 |
client-id |
| OpenID 공급자에 등록된 클라이언트의 고유 식별자입니다. |
client-key-password |
|
|
client-keystore |
| 애플리케이션이 HTTPS를 통해 OpenID 공급자와 통신하는 경우 이 속성의 클라이언트 키 저장소 경로를 설정합니다. |
client-keystore-password |
|
|
confidential-port |
| OpenID 공급자가 사용하는 기밀 포트(SSL/TLS)를 지정합니다. |
connection-pool-size |
| OpenID 공급자와 통신할 때 사용할 연결 풀 크기를 지정합니다. |
connection-timeout-millis |
|
원격 호스트와의 연결을 밀리초 단위로 설정하기 위한 시간 제한을 지정합니다. 최소는 |
connection-ttl-millis |
|
연결을 활성 상태로 유지하는 데 걸리는 시간(밀리초)을 지정합니다. 최소값은 |
cors-allowed-headers |
|
CORS(Cross-Origin Resource Sharing)가 활성화된 경우 |
CORS-allowed-methods |
|
CORS(Cross-Origin Resource Sharing)가 활성화된 경우 |
cors-exposed-headers |
|
CORS(Cross-Origin Resource Sharing)가 활성화된 경우 |
cors-max-age |
|
CORS(Cross-Origin Resource Sharing) Max-Age 헤더 값을 설정합니다. 값은 |
인증 정보 |
| OpenID 공급자와 통신하는 데 사용할 인증 정보를 지정합니다. |
disable-trust-manager |
| HTTPS를 통해 OpenID 공급자와 통신할 때 신뢰 관리자를 사용할지 여부를 지정합니다. |
enable-cors |
| Red Hat build of Keycloak CORS(Cross-Origin Resource Sharing) 지원을 활성화합니다. |
enable-basic-auth |
| 기본 인증을 활성화하여 전달자 토큰을 가져오는 데 사용할 자격 증명을 지정합니다. |
expose-token |
|
|
ignore-oauth-query-parameter |
|
|
min-time-between-jwks-requests |
하위 시스템에서 알 수 없는 공개 키로 서명된 토큰을 감지하면 JBoss EAP는 | principal-attribute |
| ID 토큰에서 주체로 사용할 클레임 값을 지정합니다. | provider |
| OpenID 공급자를 지정합니다. | provider-url |
| OpenID 공급자 URL을 지정합니다. | proxy-url |
| HTTP 프록시를 사용하는 경우 HTTP 프록시의 URL을 지정합니다. | public-client |
|
| realm |
| Red Hat build of Keycloak에서 연결할 영역입니다. | realm-public-key |
| OpenID 공급자의 공개 키를 PEM 형식으로 지정합니다. | redirect-rewrite-rule |
| 리디렉션 URI에 적용할 재작성 규칙을 지정합니다. | register-node-at-startup |
|
| register-node-period |
| 노드를 초 단위로 다시 등록하는 빈도를 지정합니다. | resource |
|
OIDC를 사용하여 보안하는 애플리케이션의 이름을 지정합니다. 또는 | socket-timeout-millis |
| 데이터를 기다리는 소켓 시간 제한을 밀리초 단위로 지정합니다. | ssl-required |
| OpenID 공급자와의 통신이 HTTPS를 사용해야 하는지 여부를 지정합니다. 값은 다음 중 하나일 수 있습니다.
| token-minimum-time-to-live |
| 어댑터는 현재 토큰이 만료되거나 초 단위로 설정된 시간 내에 만료되는 경우 토큰을 새로 고칩니다. | token-signature-algorithm |
| OpenID 공급자가 사용하는 토큰 서명 알고리즘을 지정합니다. 지원되는 알고리즘은 다음과 같습니다.
| token-store |
| 인증 세션 데이터의 쿠키 또는 세션 스토리지를 지정합니다. | truststore |
| 어댑터 클라이언트 HTTPS 요청에 사용되는 truststore를 지정합니다. | truststore-password |
| truststore 암호를 지정합니다. | turn-off-change-session-id-on-login |
|
세션 ID는 로그인 성공 시 기본적으로 변경됩니다. 이 기능을 비활성화하려면 값을 | use-resource-role-mappings |
| 토큰에서 가져온 리소스 수준 권한을 사용합니다. | verify-token-audience |
표 5.4. secure-server
속성
속성 | 기본값 | 설명 |
---|---|---|
adapter-state-cookie-path |
|
설정된 경우 하위 시스템에서 설정한 쿠키에서 사용하는 경로를 정의합니다. 설정하지 않으면 |
allow-any-hostname |
|
값을 |
always-refresh-token |
|
|
auth-server-url-for-backend-requests |
| 로드 밸런서 또는 역방향 프록시를 통과하지 않고도 백엔드 요청에서만 OpenID 공급자를 호출할 URL을 지정합니다. |
auth-server-url |
|
Keycloak 영역 권한 부여 서버의 Red Hat 빌드의 기본 URL입니다. 또는 |
autodetect-bearer-only |
| 베어러 전용 요청을 자동으로 감지할지 여부를 설정합니다.
전달자 전용 요청이 수신되고
이 속성을 사용하여 |
bearer-only |
|
Bearer 토큰 인증으로 애플리케이션을 보호하려면 이 값을
전달자 토큰 인증이 활성화되면 사용자는 로그인할 OpenID 공급자로 리디렉션되지 않습니다. 대신 |
client-id |
| OpenID 공급자에 등록된 클라이언트의 고유 식별자입니다. |
client-key-password |
|
|
client-keystore-password |
|
|
client-keystore |
| HTTPS를 통해 OpenID 공급자와 통신할 때 이 속성의 클라이언트 키 저장소 경로를 설정합니다. |
confidential-port |
| OpenID 공급자가 사용하는 기밀 포트(SSL/TLS)를 지정합니다. |
connection-pool-size |
| OpenID 공급자와 통신할 때 사용할 연결 풀 크기를 지정합니다. |
connection-timeout-millis |
|
원격 호스트와의 연결을 밀리초 단위로 설정하기 위한 시간 제한을 지정합니다. 최소는 |
connection-ttl-millis |
|
연결을 활성 상태로 유지하는 데 걸리는 시간(밀리초)을 지정합니다. 최소값은 |
cors-allowed-headers |
|
CORS(Cross-Origin Resource Sharing)가 활성화된 경우 |
CORS-allowed-methods |
|
CORS(Cross-Origin Resource Sharing)가 활성화된 경우 |
cors-exposed-headers |
|
CORS(Cross-Origin Resource Sharing)가 활성화된 경우 |
cors-max-age |
|
CORS(Cross-Origin Resource Sharing) Max-Age 헤더 값을 설정합니다. 값은 |
인증 정보 |
| OpenID 공급자와 통신하는 데 사용할 인증 정보를 지정합니다. |
disable-trust-manager |
| HTTPS를 통해 OpenID 공급자와 통신할 때 신뢰 관리자를 사용할지 여부를 지정합니다. |
enable-basic-auth |
| 기본 인증을 활성화하여 전달자 토큰을 가져오는 데 사용할 자격 증명을 지정합니다. |
enable-cors |
| Red Hat build of Keycloak CORS(Cross-Origin Resource Sharing) 지원을 활성화합니다. |
expose-token |
|
|
ignore-oauth-query-parameter |
|
|
min-time-between-jwks-requests |
|
하위 시스템에서 알 수 없는 공개 키로 서명된 토큰을 감지하면 JBoss EAP는 |
principal-attribute |
| ID 토큰에서 주체로 사용할 클레임 값을 지정합니다. |
principal-attribute |
| ID 토큰의 클레임 값을 ID의 주체로 사용할지 지정합니다. |
provider |
| OpenID 공급자를 지정합니다. |
provider-url |
| OpenID 공급자 URL을 지정합니다. |
proxy-url |
| HTTP 프록시를 사용하는 경우 HTTP 프록시의 URL을 지정합니다. |
public-client |
|
|
public-key-cache-ttl |
| 새 공개 키를 검색하기 위한 두 요청 사이의 최대 간격(초)입니다. |
realm-public-key |
| OpenID 공급자의 공개 키를 PEM 형식으로 지정합니다. |
realm |
| Red Hat build of Keycloak에서 연결할 영역입니다. |
redirect-rewrite-rule |
| 리디렉션 URI에 적용할 재작성 규칙을 지정합니다. |
register-node-at-startup |
|
|
register-node-period |
| 노드를 초 단위로 다시 등록하는 빈도를 지정합니다. |
resource |
|
OIDC를 사용하여 보안하는 애플리케이션의 이름을 지정합니다. 또는 |
socket-timeout-millis |
| 데이터를 기다리는 소켓 시간 제한을 밀리초 단위로 지정합니다. |
ssl-required |
| OpenID 공급자와의 통신이 HTTPS를 사용해야 하는지 여부를 지정합니다. 값은 다음 중 하나일 수 있습니다.
|
token-minimum-time-to-live |
| 어댑터는 현재 토큰이 만료되거나 초 단위로 설정된 시간 내에 만료되는 경우 토큰을 새로 고칩니다. |
token-signature-algorithm |
| OpenID 공급자가 사용하는 토큰 서명 알고리즘을 지정합니다. 지원되는 알고리즘은 다음과 같습니다.
|
token-store |
| 인증 세션 데이터의 쿠키 또는 세션 스토리지를 지정합니다. |
truststore-password |
| truststore 암호를 지정합니다. |
truststore |
| 어댑터 클라이언트 HTTPS 요청에 사용되는 truststore를 지정합니다. |
turn-off-change-session-id-on-login |
|
세션 ID는 로그인 성공 시 기본적으로 변경됩니다. 이 기능을 비활성화하려면 값을 |
use-resource-role-mappings |
| 토큰에서 가져온 리소스 수준 권한을 사용합니다. |
verify-token-audience |
|
|
표 5.5. realm
속성
속성 | 기본값 | 설명 |
---|---|---|
allow-any-hostname |
|
값을 |
always-refresh-token |
|
|
auth-server-url |
|
Keycloak 영역 권한 부여 서버의 Red Hat 빌드의 기본 URL입니다. 또는 |
autodetect-bearer-only |
|
베어러 전용 요청을 자동으로 감지할지 여부를 설정합니다. 전달자 전용 요청이 수신되고 |
client-key-password |
|
|
client-keystore |
| 애플리케이션이 HTTPS를 통해 OpenID 공급자와 통신하는 경우 이 속성의 클라이언트 키 저장소 경로를 설정합니다. |
client-keystore-password |
|
|
confidential-port |
| Red Hat build of Keycloak에서 사용하는 기밀 포트(SSL/TLS)를 지정합니다. |
connection-pool-size |
| Red Hat build of Keycloak과 통신할 때 사용할 연결 풀 크기를 지정합니다. |
connection-timeout-millis |
|
원격 호스트와의 연결을 밀리초 단위로 설정하기 위한 시간 제한을 지정합니다. 최소는 |
connection-ttl-millis |
|
연결을 활성 상태로 유지하는 데 걸리는 시간(밀리초)을 지정합니다. 최소는 |
cors-allowed-headers |
| CORS(Cross-Origin Resource Sharing)가 활성화된 경우 Access-Control-Allow-Headers 헤더 값을 설정합니다. 쉼표로 구분된 문자열이어야 합니다. 이는 선택 사항입니다. 설정되지 않은 경우 이 헤더는 CORS 응답에서 반환되지 않습니다. |
CORS-allowed-methods |
|
CORS(Cross-Origin Resource Sharing)가 활성화된 경우 |
cors-exposed-headers |
|
CORS(Cross-Origin Resource Sharing)가 활성화된 경우 |
cors-max-age |
|
CORS(Cross-Origin Resource Sharing) Max-Age 헤더 값을 설정합니다. 값은 |
disable-trust-manager |
| HTTPS를 통해 OpenID 공급자와 통신할 때 신뢰 관리자를 사용할지 여부를 지정합니다. |
enable-cors |
| Red Hat build of Keycloak CORS(Cross-Origin Resource Sharing) 지원을 활성화합니다. |
expose-token |
|
|
ignore-oauth-query-parameter |
|
|
principal-attribute |
| ID 토큰에서 주체로 사용할 클레임 값을 지정합니다. |
provider-url |
| OpenID 공급자 URL을 지정합니다. |
proxy-url |
| HTTP 프록시를 사용하는 경우 HTTP 프록시의 URL을 지정합니다. |
realm-public-key |
| 영역의 공개 키를 지정합니다. |
register-node-at-startup |
|
|
register-node-period |
| 노드를 다시 등록할 빈도를 지정합니다. |
socket-timeout-millis |
| 데이터를 기다리는 소켓 시간 제한을 밀리초 단위로 지정합니다. |
ssl-required |
| OpenID 공급자와의 통신이 HTTPS를 사용해야 하는지 여부를 지정합니다. 값은 다음 중 하나일 수 있습니다.
|
token-signature-algorithm |
| OpenID 공급자가 사용하는 토큰 서명 알고리즘을 지정합니다. 지원되는 알고리즘은 다음과 같습니다.
|
token-store |
| 인증 세션 데이터의 쿠키 또는 세션 스토리지를 지정합니다. |
truststore |
| 클라이언트 HTTPS 요청에 사용되는 truststore를 지정합니다. |
truststore-password |
| truststore 암호를 지정합니다. |
verify-token-audience |
|
|
5.2. security-domain
속성
속성을 설정하여 security-domain
을 구성할 수 있습니다.
속성 | 설명 |
---|---|
default-realm | 이 보안 도메인에 포함된 기본 영역입니다. |
evidence-decoder | 이 도메인에서 사용할 EvidenceDecoder에 대한 참조입니다. |
outflow-anonymous | 이 속성은 다음 시나리오에서 발생하는 익명 ID를 보안 도메인에 대한 outflow를 사용할 수 없는지 여부를 지정합니다.
익명 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를 보안 도메인에 축소할 수 없는 경우 다음 시나리오에서는 이 특성을
익명 ID는 해당 도메인에 대해 이미 설정된 모든 ID를 지우는 효과가 있습니다.
기본값은 |
outflow-security-domains | 이 가상 도메인의 보안 ID가 자동으로 로 흐름을 해제해야 하는 보안 도메인 목록입니다. |