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을 사용하여 애플리케이션이 보호됩니다.