복붙노트

[SPRING] GSSException : 유효한 자격 증명이 제공되지 않는다 (기구 레벨 : Kerberos tgt를 찾지 못했습니다)

SPRING

GSSException : 유효한 자격 증명이 제공되지 않는다 (기구 레벨 : Kerberos tgt를 찾지 못했습니다)

나는 MOngoDB + Java Configuration을 처음 접했습니다. 내가 원격 응용 프로그램에서 원격 mongodb 서버에서 연결을 시도하고있다. mongotemplate과의 연결을 위해 GSSAPI 메커니즘을 사용하고 싶습니다. 아래 코드가 성공적으로 실행되었습니다. 아래 코드는 제 설정 파일에 있습니다.

List<ServerAddress> serverAddresses = new ArrayList<ServerAddress>();
    ServerAddress address = new ServerAddress(host, port);
    serverAddresses.add(address);
    List<MongoCredential> credentials = new ArrayList<MongoCredential>();

    MongoCredential credential = MongoCredential.createGSSAPICredential(userName);

    credential.withMechanismProperty("SERVICE_NAME", gssapiServiceName);
    credential.withMechanismProperty("CANONICALIZE_HOST_NAME", true);
    credentials.add(credential);

    return new MongoClient(serverAddresses, credentials);

하지만 아래 코드를 실행하려고하면 예외가 발생합니다.

DB db = mongoTemplate.getDb();
Set<String> dbCollections1 = db.getCollectionNames();

예외:

해결법

  1. ==============================

    1.대답 한 모든 사람들에게 감사 드리며 제 질문을 살펴 봅니다.

    대답 한 모든 사람들에게 감사 드리며 제 질문을 살펴 봅니다.

    시스템 등록 정보와 새로운 conf 파일을 추가 한 후, 마지막으로 MongoDB 서버에 연결할 수 있습니다. 이와 함께 업데이트 된 코드 -

    try {
            System.setProperty("java.security.krb5.conf","C:/mongodb/UnixKeytab/krb5.conf");
            System.setProperty("java.security.krb5.realm","EXAMPLE.COM");
            System.setProperty("java.security.krb5.kdc","example.com");
            System.setProperty("javax.security.auth.useSubjectCredsOnly","false");
            System.setProperty("java.security.auth.login.config","C:/mongodb/UnixKeytab/gss-jaas.conf");
    
    
            List<ServerAddress> serverAddresses = new ArrayList<ServerAddress>();
            ServerAddress address = new ServerAddress(host, port);
            serverAddresses.add(address);
            List<MongoCredential> credentials = new ArrayList<MongoCredential>();
            MongoCredential credential = MongoCredential.createGSSAPICredential(username);
            credentials.add(credential);
            MongoClient mongoClient1 = new MongoClient(serverAddresses, credentials);
            DB db = mongoClient1.getDB(database);
    
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    

    내 krb5.conf 파일은 다음과 같습니다.

    [libdefaults]
         default_realm = EXAMPLE.COM
         default_tkt_enctypes = des-cbc-md5 rc4-hmac
         default_tgs_enctypes = des-cbc-md5 rc4-hmac
         default_keytab_name = <keytab file path>
    [realms]
    EXAMPLE.COM = {
        kdc = example.com
        master_kdc = example.com
        default_domain = EXAMPLE.COM
    }
    INTRANET = {
        kdc = example.com
        master_kdc = example.com
        default_domain = example.com
    }
    

    내 gss-jaas.conf는 다음과 같습니다.

    com.sun.security.jgss.initiate {
    com.sun.security.auth.module.Krb5LoginModule required
    useKeyTab=true
    useTicketCache=false
    principal="my-account@MY_REALM"
    doNotPrompt=true
    keyTab="path-to-my-keytab-file"
    debug=true;};
    

    내가 게시 한 코드가 나를 위해 일하고있다. 희망이 다른 사람들을 위해 작동합니다.

  2. ==============================

    2.이미이 게시물에 정보를 추가하는 것은 매우 유용합니다.

    이미이 게시물에 정보를 추가하는 것은 매우 유용합니다.

    Subject : doAs 메소드 내에서 Sasl / createSaslClient가 실행되지 않는 경우 LoginContext에서 검색된 경우 자격 증명이 krb5.conf 파일에서 선택되지 않습니다. GSS 코드는 Subject : doAs 메소드를 통해 등록 된 Subject에 대한 현재 스레드의 보안 관리자를 살펴본 후이 주제의 자격 증명을 사용합니다. 이 Subject는 jaas를 통해 가져와야하며 올바른 jaas 및 krb5.conf 자격 증명을 읽어야하지만 Subject : doAs 메서드 내에서 sasl 및 saslclient 메서드를 실행하지 않으면이 모든 내용이 중요하지 않습니다.

    javax.security.auth.useSubjectCredsOnly = false를 설정하면 (자), 자격을 발견 할 수없는 경우, jaas 파일 내의 디폴트의 이름이 검색됩니다. LoginConfigImpl.java # 92, 1 개는 com.sun.security입니다. .jgss.initiate.

    전자

    com.sun.security.jgss.initiate{
       com.sun.security.auth.module.Krb5LoginModule required
       doNotPrompt=true
       useTicketCache=true
       useKeyTab=true
       keyTab="mykeytab"
       principal="service/host@REALM";
     };
    
  3. ==============================

    3.나는 "메커니즘 수준 : Kerberos tgt를 찾지 못했습니다"라는 동일한 오류에 직면했습니다. 내 문제는 너와 다르지만 같은 오류가있는 다른 문제는 유용 할 수있다.

    나는 "메커니즘 수준 : Kerberos tgt를 찾지 못했습니다"라는 동일한 오류에 직면했습니다. 내 문제는 너와 다르지만 같은 오류가있는 다른 문제는 유용 할 수있다.

    제 경우에는 구성 파일 중 하나에 프린시 ^ 이름을 쓰는 중 오류가 발생했습니다.

    Jaas LoginManager 구성 파일 (java.security.auth.login.config와 함께 제공됨) 및 주체의 정책 파일을 확인하는 것이 좋습니다. 전형적인 오류는 소문자로 된 도메인 이름입니다 : gino@AUTHDEMO.IT 대신 gino@authdemo.it

    주체를 프로그래밍 방식으로 설정 / 참조하는 경우 코드에서 주체 이름 정확성을 검사 할 수도 있습니다. 문안 인사

  4. from https://stackoverflow.com/questions/33829017/gssexception-no-valid-credentials-provided-mechanism-level-failed-to-find-any by cc-by-sa and MIT license