WebSphere® Application Server Liberty의
SPNEGO(Simple and Protected GSS-API Negotiation Mechanism) 웹 인증을 사용하여 HTTP 요청에 대한 싱글 사인온을 사용할 수 있습니다.
HTTP 사용자는 SPNEGO 싱글 사인온을 사용하여 자체 데스크탑에서 한 번만 Microsoft® 도메인 제어기에 로그인할 수 있으며,
Liberty 서버에서 싱글 사인온(SSO)을 달성할 수 있습니다.
시작하기 전에
다음 소프트웨어를 구성하고 사용 가능한지 확인하십시오.
- Active Directory Domain Controller 및 연관된 Kerberos KDC(Key Distribution Center)를
실행 중인 Microsoft Windows®
Server. 이 주제에서 이러한 도메인 제어기를 위한 예제 호스트는 myAdMachine.example.com입니다.
도메인 제어기 이름은 mydomain.example.com이고 Kerberos 영역 이름은 MYDOMAIN.EXAMPLE.COM이며,
이는 도메인 제어기 이름을 모두 대문자로 나타낸 것입니다.
- IETF RFC 2478에 정의된 SPNEGO 인증 메커니즘을 지원하는 Microsoft Windows®
도메인 멤버(클라이언트). 적절한 클라이언트의 예는 최신 브라우저 또는 Microsoft .NET
클라이언트입니다. 대부분의 최신 브라우저는 SPNEGO 인증을 지원합니다. 이 주제에서 클라이언트를 위한 호스트의 예는
myClientMachine.example.com입니다.
- 애플리케이션 내에 보호된 자원이 있는 Liberty 서버의 서버 플랫폼.
Active Directory의 사용자는 기본 Liberty 서버 인증 메커니즘을 사용하여
Liberty 서버 보호 자원에 액세스할 수 있어야 합니다.
이 주제의 경우, 예제 Liberty
서버 호스트는 myLibertyMachine.example.com입니다.
참고: 소프트웨어 구성은 총 세 대의 필수 시스템에 대해 실행 중인 도메인 제어기,
해당 도메인의 최소한 하나의 클라이언트 시스템, 그리고 애플리케이션 내에 보호된 자원이 있는 Liberty 서버의 서버 플랫폼을 보유해야 합니다. 도메인 제어기에서
직접 SPNEGO를 사용하는 것은 지원되지 않습니다.
참고: 클라이언트, Microsoft Active Directory 서버 및 Liberty 서버의 클럭이
기본적으로 서로 간에 5분 이내로 동기화되었는지 확인하십시오. 동기화에서 허용되는 차이는 구성 가능합니다.
참고: 현재 IBM® JDK만
지원됩니다. 비IBM JDK는 지원되지 않습니다.
이 태스크 정보
이 태스크의 목적은 사용자가 재인증 없이 성공적으로 Liberty 서버 자원에 액세스할 수 있도록 함으로써
Microsoft Windows® 데스크탑 싱글 사인온 기능을 달성하는 것입니다.
이 태스크는 SPNEGO 웹 인증을 사용하여 HTTP 요청에 대한 싱글 사인온을 지원하도록 Liberty 서버를 구성하는 방법을 보여줍니다.
프로시저
- Microsoft 도메인 제어기(myAdMachine.example.com)에서
Liberty 서버에 대한 Kerberos 서비스 프린시펄 이름(SPN) 및 키 탭 파일을 작성하십시오.
- Liberty 서버에 대한 사용자 계정을 작성하십시오. 이 계정은 Kerberos SPN(Service Principal Name)에 맵핑하는 데 사용됩니다.Active Directory 시스템의 경우, 이 계정 작성은 일반적으로
로 이동하여 패널에서 사용자를 마우스 오른쪽 단추로 클릭한 후
를 선택하여 수행될 수 있습니다. 이 주제에서는
사용자 myLibertyMachine_http가 비밀번호 security로 작성되는 것으로 가정합니다.
- Microsoft setspn 명령을 실행하여 사용자 계정을
Kerberos SPN에 맵핑하십시오. 이 사용자 계정은 KDC의 Kerberos 서비스로서의
Liberty 서버를 나타냅니다. setspn 명령의 예는 다음과 같습니다.
C:\> setspn -a HTTP/myLibertyMachine.example.com myLibertyMachine_http
Registering ServicePrincipalNames for CN=myLibertyMachine_http,CN=Users,DC=MYDOMAIN,DC=EXAMPLE,DC=COM
HTTP/myLibertyMachine.example.com
Updated object
참고: Microsoft setspn 명령 버전이
-S 옵션을 지원하는 경우에는 -A 대신 -S 옵션을
사용해야 합니다.
- Microsoft ktpass 도구를 사용하여 Kerberos 키 탭 파일을 작성하십시오.
이 파일의 기본 이름은 krb5.keytab입니다.
ktpass 명령의 예는 다음과 같습니다.
C:\> ktpass -out krb5.keytab -princ HTTP/myLibertyMachine.example.com@MYDOMAIN.EXAMPLE.COM -mapUser myLibertyMachine_http -mapOp set -pass security -crypto RC4-HMAC-NT -ptype KRB5_NT_PRINCIPAL
Targeting domain controller: myAdMachine.MYDOMAIN.EXAMPLE.COM
Using legacy password setting method
Successfully mapped HTTP/myLibertyMachine.example.com to myLibertyMachine_http.
Key created.
Output keytab to krb5.keytab:
Keytab version: 0x502
keysize 93 HTTP/myLibertyMachine.example.com@MYDOMAIN.EXAMPLE.COM ptype 1 (KRB5_NT_PRINCIPAL) vno 3 etype 0x17 (RC4-HMAC) keylength 16 (0x148d643db283327d3f3d44547da8cade)
다음 명령 중 하나를 사용하여 Microsoft 포리스트(forest)에 중복 SPN이 없는지 확인하십시오.
- Microsoft setspn 명령 버전이
중복 SPN 검색에 대해 -X 옵션을 지원하는 경우에는 setspn -X를 사용하십시오.
C:\>setspn -X HTTP/myLibertyMachine.example.com
Processing entry 0
found 0 group of duplicate SPNs.
- Microsoft ldif 명령을 사용할 수도 있습니다.
다음 예제는 중복 SPN이 없음을 의미하면서 하나의 항목이 리턴되었음을 나타냅니다.
C:\>ldifde -f check_SPN.txt -t 3268 -d "" -l servicePrincipalName -r "
(servicePrincipalName=HTTP/myLibertyMachine.example.com)" -p subtree
Connecting to "myAdMachine.MYDOMAIN.EXAMPLE.COM"
Logging in as current user using SSPI
Exporting directory to file check_SPN.txt
Searching for entries...
Writing out entries.
1 entries exported
여러 KDC 시스템에 SPN 및 키 탭 파일을 작성하는 데 관한 정보는
Kerberos
서비스 프린시펄 이름 및 키 탭 파일 작성을 참조하십시오.
- Liberty
서버 시스템(myLibertyMachine.example.com)에서
Kerberos 키 탭과 구성 파일 및 SPNEGO 웹 인증을 사용으로 설정하십시오.
- 도메인 제어기의 Kerberos 키 탭 파일을 Liberty 서버 시스템으로 복사하십시오. 이 파일의 기본 이름은
krb5.keytab이며 기본 위치는 플랫폼에 따라 다르지만
Kerberos 구성 파일과 동일한 디렉토리입니다. 다양한 플랫폼의 기본 위치는 다음 단계를 참조하십시오.
- Kerberos 구성 파일을 작성하십시오.
Kerberos 구성 파일은 클라이언트 구성 정보를 포함합니다. 이 정보는 관심 영역에 대한 KDC의 위치, 현재 Kerberos 영역의 기본값 및 Kerberos 영역으로의 호스트 이름 맵핑을 포함합니다.
Liberty 서버의 경우에는 이 파일을 수동으로 작성해야 합니다.
다음은 AIX,
z/OS, HP-UX 또는 Solaris 플랫폼(기본 키 탭 위치 기반)의 샘플 Kerberos 구성 파일입니다.
[libdefaults]
default_realm = MYDOMAIN.EXAMPLE.COM
default_keytab_name = FILE:/etc/krb5/krb5.keytab
default_tkt_enctypes = rc4-hmac
default_tgs_enctypes = rc4-hmac
forwardable = true
renewable = true
noaddresses = true
clockskew = 300
udp_preference_limit = 1
[realms]
MYDOMAIN.EXAMPLE.COM = {
kdc = myAdMachine.example.com:88
default_domain = example.com
}
[domain_realm]
.example.com = MYDOMAIN.EXAMPLE.COM
참고: 영역 이름은 보통 대문자로 지정됩니다. Microsoft Active Directory를 사용 중인 경우 영역 이름은 대문자여야 합니다.
참고: 사용 가능한 모든 KDC 솔루션이 모든 암호화 유형을 지원하는 것은 아닙니다. 암호화 유형을 선택하기 전에 Kerberos 관리자 및 사용자 안내서를 참조해서 사용하려는 암호화 유형을 KDC가 지원하는지 확인하십시오.
Kerberos 구성 파일, Kerberos 키 탭 파일, Kerberos SPN 및 Kerberos 클라이언트를 위한
공통 암호화 유형이 있는지 확인하십시오. 예를 들어, Kerberos 클라이언트가 RC4-HMAC 암호화 유형을 사용하는 경우
대상 서버도 RC4-HMAC 암호화 유형을 지원해야 하며, Kerberos 구성 파일은
default_tgt_enctypes 및 default_tkt_enctypes 매개변수에 RC4-HMAC를
먼저 나열해야 합니다.
이 파일의 컨텐츠에 대한 추가 정보 및 요구사항은
Kerberos 구성 파일
작성을 참조하십시오.
- Kerberos 구성 및 키 탭 파일을 확인하십시오.
kinit 명령 후에는 klist 명령을 사용하여 Kerberos 티켓을 나열할 수 있습니다. Kerberos 티켓을 얻은 경우
Kerberos 키 탭 및 구성이 유효합니다.
- Liberty 서버에서 SPNEGO 웹 인증을 구성하고 사용하십시오.
Liberty의
spnego-1.0 기능을 사용하여 SPNEGO 웹 인증을 사용할 수 있습니다.
- spnego-1.0 기능을 server.xml 파일에 추가하십시오.
<featureManager>
<feature>spnego-1.0</feature>
<feature>appSecurity-2.0</feature>
...
</featuremanager>
spnego-1.0 기능을 추가하면 특정 최소 구성이
자동으로 사용됩니다. server.xml 파일에 <spnego> 요소를 지정할 필요가 없습니다.
<spnego> 요소를 지정하지 않는 경우 다음 구성이 암시됩니다.
<spnego
canonicalHostName="true"
disableFailOverToAppAuthType="true"
trimKerberosRealmNameFromPrincipal="true"
includeClientGSSCredentialInSubject="true" />
참고: 런타임은 다음 형식으로 기본 SPN을 형성합니다.
"HTTP/" + java.net.InetAddress.getLocalHost().getCanonicalHostName();
기본 SPN이 krb5.keytab 파일에 있는 것과 일치하지 않는 경우에는 servicePrincipalNames를 지정해야 합니다. 예:
<spnego id="mySpnego" servicePrincipalNames="HTTP/myLibertyMachine.example.com"/>
참고: spnego-1.0 기능이 사용되고
<spnego> 요소가 생략되었거나 authFilterRef 속성과 함께 구성되지 않은 경우,
보호되는 자원에 액세스하는 모든 요청은 SPNEGO 인증을 사용합니다.
인증 필터 구성에 대한 자세한 정보는 인증 필터의
내용을 참조하십시오.
참고: krb5Config 또는 krb5Keytab 속성의 값이 주어지지 않은 경우,
각 파일은 기본 위치에 존재하는 것으로 예상됩니다. 다양한 플랫폼에서의 Kerberos 구성 및 키 탭 파일의 기본 위치는
이 예의 앞 부분에서 제공됩니다.
- 선택사항: 필요한 경우 추가 구성 옵션을 지정하십시오.
Liberty는 다수의 공통 SPNEGO 시나리오와 구성을 지원합니다. 예를 들어, 특정 요청, 웹 애플리케이션, 호스트 또는 사용자 에이전트에 대해서만
SPNEGO 인증을 요구하도록 HTTP 요청을 필터링할 수 있습니다.
또한 각 기본 위치에서 Kerberos 구성 및 키 탭 파일을 제거할 수도 있습니다. 다음은 기본 <spnego> 설정을 변경하는 샘플 구성입니다.
<server>
<featureManager>
<feature>spnego-1.0</feature>
<feature>appSecurity-2.0</feature>
...
</featureManager>
...
<authFilter id="myAuthFilter">
<host id="myHost" name="example.com" matchType="contains" />
<webApp id="myWebApp" name="protectedApp" matchType="equals" />
</authFilter>
<spnego id="mySpnego"
includeClientGSSCredentialInSubject="false"
krb5Config="${server.config.dir}/resources/security/kerberos/krb5.conf"
krb5Keytab="${server.config.dir}/resources/security/kerberos/krb5.keytab"
servicePrincipalNames="HTTP/myLibertyMachine.example.com"
authFilterRef="myAuthFilter" />
</spnego>
...
</server>
이 구성을 사용하면 protectedApp 내의 자원에 대해
호스트 이름 example.com을 포함하는 요청이 수신되는 경우 SPNEGO 인증이 사용됩니다.
또한 클라이언트의 GSS 신임 정보는 인증 성공 시 사용자 주제에 추가되지 않습니다. 끝으로, 서버가 사용할
Kerberos 구성 및 키 탭 파일에는 각 기본 위치 대신 서버 구성 디렉토리 내의
특정 위치가 제공됩니다.
구성 옵션에 대한 자세한 정보는
SPNEGO(The Simple and Protected GSS-API
Negotiation Mechanism)를 참조하십시오.
Kerberos 프린시펄 이름을
WebSphere 사용자 레지스트리 ID에 맵핑하는 데 대한 정보는
클라이언트 Kerberos 프린시펄 이름을 WebSphere 사용자
레지스트리 ID에 맵핑을 참조하십시오.
인증에 Kerberos 프린시펄 이름을 사용하려는 드문 경우에는
SPNEGO 인증 권한 부여를 위해 Kerberos 프린시펄 이름 사용의 내용을 참조하십시오. 이러한 단계는
필요한 경우에만 수행되며 기본 맵핑 또는 JAAS 사용자 정의 로그인 모듈 맵핑을 사용하도록
특별히 선택하지 않은 사용자에 의해 수행됩니다.
- 클라이언트 애플리케이션 시스템(myClientMachine.example.com)에서 클라이언트 애플리케이션을 구성하십시오.
다음 단계는 클라이언트 시스템에서만 수행되어야 합니다.
Active Directory 시스템 또는 Liberty 서버 시스템에서
브라우저를 시작하고 이러한 단계를 수행하는 것은 작동되지 않습니다.
다음 단계는 브라우저에서 SPNEGO 보안 자원에 액세스하는 사용자를 위한 것입니다. SPNEGO 인증을 지원하는
브라우저가 설치되어 있어야 합니다.
Microsoft Internet
Explorer:
- 데스크탑에서 Windows Active
Directory 도메인에 로그인하십시오.
- Internet Explorer 창에서 을 클릭하십시오. 표시되는 창에서
보안 탭을 클릭하십시오.
- 로컬 인트라넷 아이콘을 선택한 후 사이트를 클릭하십시오.
- Internet Explorer 버전 9 또는 이전 버전을 사용 중인 경우에는 다음 단계로 이동하십시오. Internet Explorer 10 이상을 사용 중인 경우에는
로컬 인트라넷 창에서 고급을 클릭하십시오.
- 웹 사이트 필드에 표시된 웹 사이트 목록에 대해 싱글 사인온(SSO)을 사용할 수 있도록
로컬 인트라넷 창에서 이 웹 사이트를 지역에 추가 필드에
호스트 이름의 웹 주소를 넣으십시오. 사이트 정보 기술 담당자가 이 정보를 제공합니다.
두 번째 로컬 인트라넷 창을 닫고 확인을 클릭하여 이 단계를 완료하고 로컬 인트라넷 창을 닫으십시오.
- 인터넷 옵션 창에서 고급 탭을 클릭하고 보안 설정으로 스크롤하십시오. 통합 Windows® 인증 사용 상자가
선택되었는지 확인하십시오.
- 확인을 클릭하십시오. Microsoft Internet Explorer를 다시 시작하여 이 구성을 활성화하십시오.
Mozilla Firefox:
- 데스크탑에서 Windows Active
Directory 도메인에 로그인하십시오.
- Firefox의 주소 필드에 about:config를 입력하십시오.
- 필터/검색 상자에 network.n을 입력하십시오.
- network.negotiate-auth.trusted-uris를 두 번 클릭하십시오.
이 환경 설정은 브라우저에서 SPNEGO 인증에 관여하도록 허용하는 사이트를 나열합니다. 신뢰 도메인 또는 URL의
쉼표로 구분된 목록을 입력하십시오.
참고: network.negotiate-auth.trusted-uris의 값을 설정해야 합니다.
- 배치된 SPNEGO 솔루션이 고급 Kerberos 기능인 신임
위임(Credential Delegation)을 사용하는 경우, network.negotiate-auth.delegation-uris를 두 번 클릭하십시오.
이 환경 설정은 브라우저가 사용자 권한 부여를 서버에 위임할 수 있는 사이트를 나열합니다. 신뢰 도메인 또는 URL의
쉼표로 구분된 목록을 입력하십시오.
- 확인을 클릭하십시오. 구성은 업데이트를 반영합니다.
- Firefox 브라우저를 다시 시작하여 이 구성을 활성화하십시오.
참고: SPNEGO를 위한 도메인 제어기가 작동하려면 사용자는 로그인 상태여야 합니다. 이전 예제 시스템을 사용하는 경우,
브라우저를 통해 SPNEGO 인증이 작동하도록 하려면 사용자는
MYDOMAIN.EXAMPLE.COM\username에 있는 도메인 제어기에 로그인해야 합니다.
참고: 사용자 ID 및 비밀번호를 입력하라는 프롬프트가 여러 번 표시되는 경우에는
다음과 같은 이전 지시사항에 따라 클라이언트 브라우저에서 SPNEGO 지원을 사용하도록
설정했는지 확인하십시오. 또한 <spnego> 구성에서 disableFailOverToAppAuthType 속성이
false로 설정되었는지도 확인해야 합니다.
결과
사용자의 인터넷 브라우저는 이제 SPNEGO 인증을 위해 적절하게 구성되었습니다.
사용자 ID와 비밀번호에 대한 프롬프트가 제시되지 않아도
Liberty 서버에 배치된 보안 설정된 자원에서
애플리케이션을 사용할 수 있습니다.
SPNEGO가 작동 중인지 확인하기 위해,
도메인 제어기에 로그인한 후에 Liberty 서버의 보호되는 자원에 액세스할 수 있습니다. 그리고 도메인 제어기에 로그인되어 있으므로
신임 정보에 대한 프롬프트가 제시되지 않습니다. 그러나 도메인 제어기에 로그인하지 않고
보안 자원에 액세스하려고 시도하면 신임 정보에 대한 프롬프트가 표시됩니다.