8.4. Kerberos
Red Hat Single Sign-On은 SPNEGO(Simple and Protected GSSAPI Negotiation Mechanism) 프로토콜을 통해 Kerberos 티켓으로 로그인을 지원합니다. 사용자가 세션을 인증한 후 웹 브라우저를 통해 투명하게 인증합니다. 웹이 아닌 경우 또는 로그인 중에 티켓을 사용할 수 없는 경우 Red Hat Single Sign-On은 Kerberos 사용자 이름 및 암호를 사용한 로그인을 지원합니다.
웹 인증의 일반적인 사용 사례는 다음과 같습니다.
- 사용자가 데스크탑에 로그인합니다.
- 사용자는 브라우저를 사용하여 Red Hat Single Sign-On에서 보호한 웹 애플리케이션에 액세스합니다.
- 애플리케이션이 Red Hat Single Sign-On 로그인으로 리디렉션됩니다.
-
Red Hat Single Sign-On은 HTML 로그인 화면을 401 및 HTTP 헤더
WWW-Authenticate: Negotiate
로 렌더링합니다. -
브라우저에 데스크탑 로그인에서 Kerberos 티켓이 있는 경우 브라우저는 데스크탑 로그인 정보를 Red Hat Single Sign-On 헤더
Authorization: Negotiate 'spnego-token'
로 전송합니다. 그렇지 않으면 표준 로그인 화면이 표시되고 사용자는 로그인 자격 증명을 입력합니다. - Red Hat Single Sign-On은 브라우저의 토큰을 검증하고 사용자를 인증합니다.
- LDAPFederationProvider를 Kerberos 인증 지원과 함께 사용하는 경우 Red Hat Single Sign-On은 LDAP의 사용자 데이터를 프로비저닝합니다. KerberosFederationProvider를 사용하는 경우 Red Hat Single Sign-On을 통해 사용자가 프로필을 업데이트하고 로그인 데이터를 미리 채울 수 있습니다.
- Red Hat Single Sign-On이 애플리케이션으로 돌아갑니다. Red Hat Single Sign-On 및 애플리케이션은 OpenID Connect 또는 SAML 메시지를 통해 통신합니다. Red Hat Single Sign-On은 Kerberos/SPNEGO 로그인에 대한 브로커 역할을 합니다. 따라서 Kerberos를 통한 Red Hat Single Sign-On 인증은 애플리케이션에서 숨겨집니다.
Kerberos 인증을 설정하려면 다음 단계를 수행합니다.
- Kerberos 서버(KDC)의 설정 및 구성
- Red Hat Single Sign-On 서버의 설정 및 구성
- 클라이언트 시스템의 설정 및 구성
8.4.1. Kerberos 서버 설정
Kerberos 서버를 설정하는 단계는 운영 체제(OS) 및 Kerberos 벤더에 따라 다릅니다. Kerberos 서버 설정 및 구성에 대한 지침은 Windows Active Directory, MIT Kerberos 및 OS 설명서를 참조하십시오.
설치하는 동안 다음 단계를 수행합니다.
- Kerberos 데이터베이스에 일부 사용자 주체를 추가합니다. Kerberos를 LDAP와 통합할 수도 있으므로 사용자 계정은 LDAP 서버에서 프로비저닝합니다.
"HTTP" 서비스에 대한 서비스 주체를 추가합니다. 예를 들어 Red Hat Single Sign-On 서버가
www.mydomain.org
에서 실행되는 경우 서비스 주체HTTP/www.mydomain.org@<kerberos 영역>을 추가합니다
.MIT Kerberos에서는 "kadmin" 세션을 실행합니다. MIT Kerberos가 있는 시스템에서는 다음 명령을 사용할 수 있습니다.
sudo kadmin.local
그런 다음 HTTP 주체를 추가하고 다음과 같은 명령을 사용하여 키를 키 탭 파일에 내보냅니다.
addprinc -randkey HTTP/www.mydomain.org@MYDOMAIN.ORG ktadd -k /tmp/http.keytab HTTP/www.mydomain.org@MYDOMAIN.ORG
Red Hat Single Sign-On이 실행 중인 호스트에서 키 탭 파일 /tmp/http.keytab
에 액세스할 수 있는지 확인합니다.
8.4.2. Red Hat Single Sign-On 서버 설정 및 구성
시스템에 Kerberos 클라이언트를 설치합니다.
절차
- Kerberos 클라이언트를 설치합니다. 시스템에서 Fedora, Ubuntu 또는 RHEL을 실행하는 경우 Kerberos 클라이언트 및 기타 유틸리티가 포함된 freeipa-client 패키지를 설치합니다.
Kerberos 클라이언트를 구성합니다(Linux에서 구성 설정은 /etc/krb5.conf 파일에 있음).
Kerberos 영역을 구성에 추가하고 서버가 실행되는 HTTP 도메인을 구성합니다.
예를 들어 MYDOMAIN.ORG 영역의 경우 다음과 같이
domain_realm
섹션을 구성할 수 있습니다.[domain_realm] .mydomain.org = MYDOMAIN.ORG mydomain.org = MYDOMAIN.ORG
HTTP 주체를 사용하여 keytab 파일을 내보내고 Red Hat Single Sign-On 서버를 실행하는 프로세스에서 파일에 액세스할 수 있는지 확인합니다. 프로덕션의 경우 이 프로세스에서만 파일을 읽을 수 있는지 확인합니다.
위의 MIT Kerberos 예제의 경우 keytab을
/tmp/http.keytab
파일로 내보냈습니다. KMS (Key Distribution Center) 와 Red Hat Single Sign-On이 동일한 호스트에서 실행되는 경우 해당 파일을 이미 사용할 수 있습니다.
8.4.2.1. >-<EGO 처리 활성화
기본적으로 Red Hat Single Sign-On은>-<EGO 프로토콜 지원을 비활성화합니다. 이를 활성화하려면 브라우저 흐름으로 이동하여 Kerberos 를 활성화합니다.
브라우저 흐름
Kerberos 요구 사항을 disabled 에서 alternative (Kerberos는 선택 사항)로 설정하거나 필수 (브라우더는 Kerberos가 활성화되어 있어야 함)를 설정합니다. iPXEEGO 또는 Kerberos로 작동하도록 브라우저를 구성하지 않은 경우 Red Hat Single Sign-On은 일반 로그인 화면으로 대체됩니다.
8.4.2.2. Kerberos 사용자 스토리지 페더스 설정
이제 User Storage 페더레이션 을 사용하여 Red Hat Single Sign-On이 Kerberos 티켓을 해석하는 방법을 구성해야 합니다. Kerberos 인증 지원을 사용하는 두 가지 페더레이션 공급자가 있습니다.
LDAP 서버가 지원하는 Kerberos로 인증하려면 LDAP 페더레이션 공급자를 구성합니다.
절차
LDAP 공급자의 구성 페이지로 이동합니다.
LDAP kerberos 통합
- Allow Kerberos authentication to ON(Kerberos 인증 허용)
Kerberos 인증을 허용하면 Red Hat Single Sign-On이 Kerberos 사용자 정보에 액세스하여 정보를 Red Hat Single Sign-On 환경으로 가져올 수 있습니다.
LDAP 서버가 Kerberos 솔루션을 백업하지 않는 경우 Kerberos 사용자 스토리지 페더레이션 공급자를 사용하십시오.
절차
- 메뉴에서 User Federation 을 클릭합니다.
공급자 추가 선택 상자에서 Kerberos 를 선택합니다.
Kerberos 사용자 스토리지 공급자
Kerberos 공급자는 간단한 사용자 정보에 대한 Kerberos 티켓을 구문 분석하고 해당 정보를 로컬 Red Hat Single Sign-On 데이터베이스로 가져옵니다. 사용자 프로필 정보(예: 이름, 성, 이메일)는 프로비저닝되지 않습니다.
8.4.3. 클라이언트 시스템 설정 및 구성
클라이언트 시스템에는 Kerberos 클라이언트가 있어야 하며 위에 설명된 대로 10.0.0.15.conf
를 설정해야 합니다. 클라이언트 머신은 브라우저에서도 10.0.0.1EGO 로그인 지원을 활성화해야 합니다. Firefox 브라우저를 사용하는 경우 Kerberos용 Firefox 구성을 참조하십시오.
.mydomain.org
URI는 network.negotiate-auth.trusted-uris
구성 옵션에 있어야 합니다.
Windows 도메인에서 클라이언트는 구성을 조정할 필요가 없습니다. Internet Explorer 및 Edge는 이미 SelectEGO 인증에 참여할 수 있습니다.
8.4.4. 인증 정보 위임
Kerberos는 자격 증명 위임을 지원합니다. 애플리케이션은 Kerberos 티켓으로 보호되는 다른 서비스와 상호 작용하기 위해 다시 사용할 수 있도록 Kerberos 티켓에 액세스해야 할 수 있습니다. Red Hat Single Sign-On 서버에서 ChronyEGO 프로토콜을 처리했기 때문에 GSS 인증 정보를 OpenID Connect 토큰 클레임 또는 SAML 어설션 특성 내에서 애플리케이션에 전파해야 합니다. Red Hat Single Sign-On은 이를 Red Hat Single Sign-On 서버에서 애플리케이션에 전송합니다. 이 클레임을 토큰 또는 어설션에 삽입하려면 각 애플리케이션에서 기본 제공 프로토콜 매퍼 위임 자격 증명을
활성화해야 합니다. 이 매퍼는 애플리케이션 클라이언트 페이지의 Mappers 탭에서 사용할 수 있습니다. 자세한 내용은 프로토콜 맵퍼 장을 참조하십시오.
애플리케이션은 다른 서비스에 대해 GSS를 호출하기 전에 Red Hat Single Sign-On에서 수신하는 클레임을 역직렬화해야 합니다. 액세스 토큰에서 GSSCredential 오브젝트로 인증 정보를 역직렬화할 때 이 인증 정보를 사용하여 GSSContext를 GSSManager.createContext
메서드로 전달합니다. 예를 들면 다음과 같습니다.
// Obtain accessToken in your application. KeycloakPrincipal keycloakPrincipal = (KeycloakPrincipal) servletReq.getUserPrincipal(); AccessToken accessToken = keycloakPrincipal.getKeycloakSecurityContext().getToken(); // Retrieve Kerberos credential from accessToken and deserialize it String serializedGssCredential = (String) accessToken.getOtherClaims(). get(org.keycloak.common.constants.KerberosConstants.GSS_DELEGATION_CREDENTIAL); GSSCredential deserializedGssCredential = org.keycloak.common.util.KerberosSerializationUtils. deserializeCredential(serializedGssCredential); // Create GSSContext to call other Kerberos-secured services GSSContext context = gssManager.createContext(serviceName, krb5Oid, deserializedGssCredential, GSSContext.DEFAULT_LIFETIME);
10.0.0.1 5.conf
파일에서 전달 가능한
Kerberos 티켓을 구성하고 브라우저에 위임된 자격 증명에 대한 지원을 추가합니다.
인증 정보 위임에는 보안에 미치는 영향이 있으므로 필요한 경우에만 HTTPS를 사용합니다. 자세한 내용과 예는 이 문서를 참조하십시오.
8.4.5. Cross-realm trust
Kerberos 프로토콜에서 영역은
Kerberos 사용자 집합입니다. 이러한 주체의 정의는 일반적으로 LDAP 서버인 Kerberos 데이터베이스에 있습니다.
Kerberos 프로토콜은 교차 영역 신뢰를 허용합니다. 예를 들어, 2개의 Kerberos 영역인 A 및 B가 존재하는 경우 교차 영역 신뢰를 통해 영역 A에서 영역 B의 리소스에 액세스할 수 있습니다. 영역 B는 영역 A를 신뢰합니다.
Kerberos cross-realm trust
Red Hat Single Sign-On 서버는 교차 영역 신뢰를 지원합니다. 이를 구현하려면 다음을 수행합니다.
-
교차 영역 신뢰를 위해 Kerberos 서버를 구성합니다. 이 단계를 구현하는 것은 Kerberos 서버 구현에 따라 달라집니다. 이 단계는 Kerberos 주체 A 및 B의 Kerberos 데이터베이스에 Kerberos 사용자 지정
gt/B@A
를 추가해야 합니다. 이 주체는 두 Kerberos 영역 모두에서 동일한 키가 있어야 합니다. 보안 주체는 두 영역에 모두 동일한 암호, 키 버전 번호 및 암호가 있어야 합니다. 자세한 내용은 Kerberos 서버 설명서를 참조하십시오.
교차 영역 신뢰는 기본적으로 단방향입니다. 영역 A와 영역 B
간의 양방향 신뢰를 위해 Kerberos 데이터베이스에 두 개의 Kerberos 데이터베이스에 보안 주체를 추가해야 합니다. 그러나 신뢰는 기본적으로 전송됩니다. 영역 B가 영역 A와 영역 C가 영역 B를 신뢰하는 경우 realm C는 보안 주체 없이 A 영역 A
를 신뢰하면 사용 가능합니다. 클라이언트가 신뢰 경로를 찾을 수 있도록 Kerberos 클라이언트 측에서 추가 구성(예: capaths
)이 필요할 수 있습니다. 자세한 내용은 Kerberos 설명서를 참조하십시오.
Red Hat Single Sign-On 서버 구성
-
Kerberos 지원이 포함된 LDAP 스토리지 공급자를 사용하는 경우
HTTP/mydomain.com@B
예제와 같이 영역 B에 대한 서버 주체를 구성합니다. LDAP 서버는 A 영역의 사용자가 Red Hat Single Sign-On에 성공적으로 인증하려는 경우 Red Hat Single Sign-On에 성공적으로 인증할 수 있는 경우, Red Hat Single Sign-On에서 gRPCEGO 흐름을 수행한 다음 사용자를 찾아야 하므로 A 영역에서 사용자를 찾아야 합니다.
-
Kerberos 지원이 포함된 LDAP 스토리지 공급자를 사용하는 경우
사용자를 찾는 것은 LDAP 스토리지 공급자 옵션 Kerberos 주체 속성을
기반으로 합니다. userPrincipalName
과 같은 값이 있는 인스턴스에 대해 구성된 경우, john@A ; 사용자 john@A
)의 CryostatEGO 인증 후 Red Hat Single Sign-On은 john@A
와 동등한 userPrincipalName
특성을 사용하여 LDAP 사용자를 조회하려고 합니다. Kerberos 주체 속성이 비어 있으면 Red Hat Single Sign-On은 해당
영역을 생략한 kerberos 주체 접두사를 기반으로 LDAP 사용자를 조회합니다. 예를 들어 Kerberos 주체 사용자 john@A
는 사용자 이름 john 아래의 LDAP에서 사용할 수 있어야 하므로 일반적으로 uid=
과 같은 LDAP DN에서 사용할 수 있습니다. 영역 A 및 B의 사용자가 인증하도록 하려면 LDAP에서 A 영역 A와 B의 사용자를 모두 찾을 수 있는지 확인합니다.
john
,ou=People,dc=example,dc=com
-
Kerberos 사용자 스토리지 공급자(일반적으로 LDAP 통합이 없는 Kerberos)를 사용하는 경우 서버 주체를
HTTP/mydomain.com@B
로 구성하고 Kerberos 영역 A 및 B의 사용자는 인증할 수 있어야 합니다.
여러 Kerberos 영역의 사용자는 모든 사용자에게 인증에 사용되는 kerberos 주체를 참조하는 KERBEROS_PRINCIPAL
속성이 있으므로 인증할 수 있으며, 이는 이 사용자를 추가로 조회하는 데 사용됩니다. kerberos 영역 A
및 B
모두에 사용자 john
이 있는 경우 충돌을 방지하기 위해 Red Hat Single Sign-On 사용자의 사용자 이름에 kerberos 영역이 소문자로 포함될 수 있습니다. 예를 들어 사용자 이름은 john@a
입니다. 구성된 Kerberos 영역과 realm이 일치하는 경우에만 realm
접미사가 생성된 사용자 이름에서 생략될 수 있습니다. 예를 들어 Kerberos 공급자에서 Kerberos 영역을 구성하는 경우 Kerberos
주체
의 사용자 이름은 john입니다.
john
@ A
8.4.6. 문제 해결
문제가 있는 경우 추가 로깅을 활성화하여 문제를 디버깅합니다.
-
Kerberos 또는 LDAP 페더레이션 공급자를 위한 관리 콘솔에서
디버그
플래그 활성화 -
org.keycloak
카테고리에 대한 TRACE 로깅을 활성화하여 서버 로그에서 자세한 정보를 수신할 수 있습니다. -
시스템 속성 추가
-Dsun.security.krb5.debug=true
및-Dsun.security.spnego.debug=true