2014-06-06 2 views
0

웹 기반 응용 프로그램에서 작업하고 있으며 응용 프로그램이 SSO (Kerberos 프로토콜을 사용하며 Active Directory 매핑과 SPN 구성이 모두 완료 됨)를 지원합니다.Kerberos 보안 토큰 생성 방법은 무엇입니까?

우리는 GUI 부분에 GWT 2.4를 사용하고 있으며 우리는 응용 프로그램을위한 독립형 및 SSO 모드를 지원합니다 (우리는 유틸리티를 사용하여 이들 모드를 전환 할 수 있습니다). 일반적인 독립형 모드에서는 사용자가 로그인 할 때 자격 증명을 입력해야하는 로그인 화면을 표시합니다. SSO 모드에서 우리는 로그인 화면을 우회하여 사용자를 애플리케이션으로 직접 데려갑니다. 클라이언트 측에서는 GWT RPC 호출을 통해이 동작을 제어했습니다.

모든 것이 제대로 작동했습니다. 나중에 우리는 IE 브라우저의 첫 번째 탭에서만 열 때 응용 프로그램이 빈 화면을 표시하는 데 사용된다는 것을 알았습니다. 이 문제를 해결하기 위해 Google은 GWT RPC를 GWT RequestBuilder로 대체했습니다. 문제가 해결되었습니다. 그러나 SSO 기능이 예상대로 작동하지 않았습니다.

나는 추적을 도입하고 Authorization 헤더가 RequestBuilders로 명시 적으로 설정되지 않는다는 것을 알아 냈습니다. 따라서 Base64를 사용하여 username : password 조합을 인코딩하고이를 Authorization 헤더로 설정했습니다.

예 : 인증 : 기본 QWxhZGRpbjpvcGVuIHNlc2FtZQ의 ==

하지만이 또한 내 문제가 해결되지 않았고 나는 협상 헤더가 설정되지 않은 알아 냈어. 협상 헤더는 어떻게 설정합니까? 이전에 설명한 것과 동일한 구성으로 GWT RPC를 사용하고 있었을 때, 협상 헤더를 명시 적으로 설정하지 않았습니다.

이 헤더의 중요성과 생성 방법에 대해 설명해주십시오. 아래는 RequestBuilder 대신 GWT RPC를 사용할 때 생성 된 Negotiate 헤더의 샘플입니다.

Negotiate  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 

이 문제에 대한 도움을 주시면 감사하겠습니다.

+0

이 질문에 자바 태그가있는 것을 확인합니다. 그래서 가능한 가장 단순한 구성 집합을 사용하여 Java API를 통해 토큰을 얻는 답이 포함되었습니다. 이 헤더는 kerberos 프로토콜로 클라이언트를 검증하기 위해 서버 측에서 토큰으로 사용됩니다. –

답변

1

좋아요.

두 가지 작업을 수행해야합니다. 1 부

1. Invoke the LoginContext functionality using JAAS and get the context associated with creating the token header. 

2. Creating the negotiate header with it. 

: -

1.1 Create the file jaas.conf and put the following info inside it following :- 

com.sun.security.jgss.krb5.accept { 
    com.sun.security.auth.module.Krb5LoginModule required 
    doNotPrompt=false 
    isInitiator=true 
    debug=false; 
}; 

1.2 Point to the file via java.security.auth.login.config to full path of this file. 

1.3 LoginContext lc = new LoginContext(); lc.login(). 

1.3

는 사용자 이름과 암호를 묻는 메시지 다음 부분에 대한 적절한 컨텍스트를 생성합니다. 실제로 헤더를 만들기위한 지금

: -

2.1 Create class TokenGenerator which implements PrivilegedExceptionAction<String>. In its run method do the following:- 

    2.1.1 GSSName gssServerName = manager.createName(ServiceNameYouWannaConnectTo, null); 
    2.1.2: GSSContext context = manager.createContext(gssServerName, 
       spnegoOid, null, GSSCredential.DEFAULT_LIFETIME); 

    2.1.3: byte spnegoToken[] = context.initSecContext(spnegoToken, 0, spnegoToken.length); 

    2.1.3: byte[] encodedToken = Base64.encodeBase64(spnegoToken); 

    2.1.4: return new String(encodedToken, "UTF-8"); 

2.2 String negotiateHeaderBody = Subject.doAs(lc.getSubject(), new TokenGenerator()); 

이 후에는 "협상"붙일 수 있으며, 비올라 당신은 헤더를 가지고있다. 중요한 것은 제 문법이 완벽하지는 않지만 단지 대략 정확하다는 것입니다. 나는 gssmanager와 spnegoOid를 만드는 것과 같은 단계를 생략했습니다. 이것은 실제로 사소한 것입니다. 마지막으로 토큰을 만드는 가장 기본적인 형식입니다. jaas.conf를 프로그래밍 방식으로 만들고 토큰 생성에 사용되는 매개 변수를보다 세밀하게 제어 할 수있는 방법이 있습니다. 또한 이것은 Sun JDK에서만 작동하며 IBM JDK의 경우에는 jaas에 약간의 조정이 필요합니다.

문제가 있으면 알려주십시오.