SPNEGO 웹 인증을 사용한 HTTP 요청에 대한 싱글 사인온
SPNEGO(Simple and Protected GSS-API Negotiation Mechanism)를 WebSphere® Application Server에 대한 웹 인증 서비스로 사용하여 WebSphere Application Server에서 보호된 자원에 대한 HTTP 요청을 안전하게 협상하고 인증할 수 있습니다.
다음의 절에서는 SPNEGO 웹 인증에 대해 자세하게 설명합니다.
SPNEGO의 개념
SPNEGO는 The Simple and Protected GSS-API Negotiation Mechanism(IETF RFC 2478)에 정의되어 있는 표준 스펙입니다.
Liberty 서버 보안을 사용하고 SPNEGO 웹 인증을 사용하는 경우에는 첫 번째 인바운드 HTTP 요청을 처리할 때 SPNEGO가 초기화됩니다. 인증 필터가 지정되지 않았거나 인증 필터가 지정되고 기준이 충족된 경우 SPNEGO는 HTTP 요청에서 식별되는 보호된 자원에 대한 액세스의 인증을 처리합니다.
Active Directory 도메인 및 연관된 Kerberos KDC(Key Distribution Center)를 가진 Microsoft Windows 서버
- IETF RFC 2478에서 정의된 대로 SPNEGO 웹 인증 메커니즘을 지원하는 웹 서비스 및 J2EE 클라이언트 또는 클라이언트 애플리케이션(예: Microsoft .NET)Microsoft Internet Explorer 및 Mozilla Firefox는 브라우저 예입니다. 사용 중인 모든 브라우저는 SPNEGO 웹 인증 메커니즘을 사용하도록 구성되어야 합니다.
HTTP 요청의 인증은 사용자(클라이언트 측)에 의해 트리거되어 SPNEGO 토큰을 생성합니다. WebSphere Application Server는 이 토큰을 수신합니다. 특히 SPNEGO 웹 인증에서는 SPNEGO 토큰에서 사용자 ID를 디코딩하고 검색합니다. 해당 ID는 권한 부여 의사결정을 작성하는 데 사용됩니다.
SPNEGO 웹 인증은 WebSphere Application Server에서 서버 측 솔루션입니다. 클라이언트 측 애플리케이션은 SPNEGO 웹 인증에서 사용할 SPNEGO 토큰의 생성을 처리합니다. WebSphere Application Server 보안 레지스트리에 있는 사용자 ID는 SPNEGO 웹 인증에서 검색하는 ID와 동일해야 합니다. Microsoft Windows Active Directory 서버가 WebSphere Application Server에서 사용되는 LDAP(Lightweight Directory Access Protocol) 서버인 경우 동일한 일치가 발생합니다. ID를 Active Directory로부터 WebSphere Application Server 보안 레지스트리에 사용자 정의 맵핑할 수 있도록 사용자 정의 로그인 모듈을 플러그인으로 사용할 수 있습니다.
WebSphere Application Server는 해당 보안 레지스트리에 대해 ID를 유효성 검증합니다. 유효성 검증에 성공하면 클라이언트 GSS 위임 신임이 검색되어 클라이언트 주제에 배치되고 LTPA(Lightweight Third Party Authentication) 보안 토큰이 작성됩니다. 그런 다음 LTPA 쿠키가 HTTP 응답에서 사용자에게 리턴됩니다. WebSphere Application Server의 더 많은 보호된 자원에 액세스하기 위해 제공되는 이 동일한 사용자로부터의 후속 HTTP 요청에서는 반복되는 로그인 인증 확인을 방지하기 위해 이전에 작성되는 LTPA 보안 토큰을 사용합니다.
단일 Kerberos 영역에서 SPNEGO 웹 인증
SPNEGO 웹 인증은 단일 Kerberos 영역(도메인)에서 지원됩니다. 인증 확인-응답 핸드쉐이크 프로세스가 다음 그림에 표시됩니다.

이전의 그림에서는 다음과 같은 이벤트가 발생합니다.
- 시작하기 위해 사용자가 워크스테이션에서 Microsoft 도메인 제어기 MYDOMAIN.EXAMPLE.COM에 로그온합니다.
- 다음으로 사용자가 웹 애플리케이션에 액세스를 시도합니다. 사용자는 클라이언트 브라우저를 사용하여 보호된 웹 자원을 요청하며, 이는 HTTP GET 요청을 Liberty 서버에 전송합니다.
- Liberty 서버의 SPNEGO 인증은 Authenticate: Negotiate 상태가 포함된 HTTP 401 인증 확인 헤더로 클라이언트 브라우저에 응답합니다.
- 클라이언트 브라우저는 통합 Windows 인증을 지원하도록 구성되어 있으므로 클라이언트 브라우저가 협상 헤더를 인식합니다. 클라이언트는 호스트 이름에 대해 요청된 URL을 구문 분석합니다. 클라이언트는 호스트 이름을 사용하여 대상 Kerberos SPN(Service Principal Name) HTTP/myLibertyMachine.example.com을 형성하여 Microsoft Kerberos KDC(TGS_REQ)의 Kerberos TGS(Ticket-Granting Service)에서 Kerberos 서비스 티켓을 요청합니다. 그런 다음 TGS는 Kerberos 서비스 티켓(TGS_REP)을 클라이언트에 발행합니다. Kerberos 서비스 티켓(SPNEGO 토큰)은 서비스(Liberty 서버)에 대한 사용자의 ID와 권한을 모두 입증합니다.
- 그리고 클라이언트 브라우저는 요청 HTTP 헤더의 이전 단계에서 가져온 SPNEGO 토큰으로 Liberty 서버 "Authenticate: Negotiate" 인증 확인에 응답합니다.
- Liberty 서버의 SPNEGO 인증은 SPNEGO 토큰으로 HTTP 헤더를 확인하고, SPNEGO 토큰을 유효성 검증하며, 사용자의 ID(프린시펄)를 가져옵니다.
- 사용자의 ID를 가져온 이후, Liberty 서버는 해당 사용자 레지스트리에서 사용자의 유효성을 검증하고 권한 검사를 수행합니다.
- 액세스가 부여되면 Liberty 서버가 HTTP 200의 응답을 전송합니다. 또한 Liberty 서버는 응답에 LTPA 쿠키도 포함합니다. 이 LTPA 쿠키는 후속 요청에 사용됩니다.
신뢰할 수 있는 Kerberos 영역에서 SPNEGO 웹 인증
SPNEGO 웹 인증은 신뢰할 수 있는 Kerberos 영역에서도 지원됩니다. 인증 확인-응답 핸드쉐이크 프로세스가 다음 그림에 표시됩니다.

이전의 그림에서는 다음과 같은 이벤트가 발생합니다.
- 사용자가 Microsoft 도메인 제어기 TRUSTEDREALM.ACME.COM에 로그인합니다.
- 클라이언트 브라우저에서, 사용자는 원래 Microsoft 도메인 제어기(MYDOMAIN.EXAMPLE.COM)의 Liberty 서버에서 호스팅된 보호된 웹 자원에 대한 요청을 작성합니다.
- Liberty 서버가 Authenticate: Negotiate 상태가 포함된 HTTP 401 인증 확인 헤더로 클라이언트 브라우저에 응답합니다.
- 클라이언트 브라우저가 통합 Windows 인증을 지원하도록 구성됩니다. 클라이언트 브라우저는 Liberty 서버 애플리케이션을 호스팅하는 워크스테이션의 호스트 이름을 사용하여 URL을 구문 분석합니다. 클라이언트 브라우저는 호스트 이름을 속성으로 사용하여 TRUSTEDREALM.ACME.COM 영역에서 MYDOMAIN.EXAMPLE.COM에 대한 Kerberos 교차 영역 티켓(TGS_REQ)을 요청합니다.
- 클라이언트 브라우저가 4단계의 Kerberos 교차 영역 티켓을 사용하여 MYDOMAIN.EXAMPLE.COM 영역에서 Kerberos 서비스 티켓을 요청합니다. Kerberos 서비스 티켓(SPNEGO 토큰)은 서비스(Liberty 서버)에 대한 사용자의 ID 및 권한을 입증합니다.
- 그리고 클라이언트 브라우저는 요청 HTTP 헤더의 이전 단계에서 가져온 SPNEGO 토큰으로 Liberty 서버 "Authenticate: Negotiate" 인증 확인에 응답합니다.
- Liberty 서버가 요청을 수신하며 SPNEGO 토큰의 HTTP 헤더를 확인합니다. 그런 다음 Kerberos 서비스 티켓을 추출하여 유효성 검증하고 사용자의 ID(프린시펄)를 가져옵니다.
- 사용자의 ID를 가져온 이후, Liberty 서버는 해당 사용자 레지스트리에서 사용자의 유효성을 검증하고 권한 검사를 수행합니다.
- 액세스가 부여되면 Liberty 서버가 HTTP 200의 응답을 전송합니다. 또한 Liberty 서버는 응답에 LTPA 쿠키도 포함합니다. 이 LTPA 쿠키는 후속 요청에 사용됩니다.
신뢰할 수 있는 Kerberos 영역 환경에서는 각각의 Kerberos KDC에서 Kerberos 신뢰할 수 있는 영역 설정을 완료해야 한다는 점에 유의하십시오. Kerberos 신뢰할 수 있는 영역 설정 방법에 대한 자세한 정보는 Kerberos 관리자 및 사용자 안내서를 참조하십시오.
브라우저 클라이언트에서 SPNEGO 웹 인증에 대한 지원 정보
- 상호 포리스트 신뢰
- 동일한 포리스트 내 도메인 신뢰
- Kerberos 영역 신뢰
- 포리스트 외부 신뢰
- 도메인 외부 신뢰
Liberty 서버에 SPNEGO를 구성하는 데 관한 자세한 정보는 Liberty의 SPNEGO 인증 구성을 참조하십시오.