[SPRING] GSSException : 유효한 자격 증명이 제공되지 않는다 (기구 레벨 : Kerberos tgt를 찾지 못했습니다)
SPRINGGSSException : 유효한 자격 증명이 제공되지 않는다 (기구 레벨 : 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.대답 한 모든 사람들에게 감사 드리며 제 질문을 살펴 봅니다.
대답 한 모든 사람들에게 감사 드리며 제 질문을 살펴 봅니다.
시스템 등록 정보와 새로운 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.이미이 게시물에 정보를 추가하는 것은 매우 유용합니다.
이미이 게시물에 정보를 추가하는 것은 매우 유용합니다.
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.나는 "메커니즘 수준 : Kerberos tgt를 찾지 못했습니다"라는 동일한 오류에 직면했습니다. 내 문제는 너와 다르지만 같은 오류가있는 다른 문제는 유용 할 수있다.
나는 "메커니즘 수준 : Kerberos tgt를 찾지 못했습니다"라는 동일한 오류에 직면했습니다. 내 문제는 너와 다르지만 같은 오류가있는 다른 문제는 유용 할 수있다.
제 경우에는 구성 파일 중 하나에 프린시 ^ 이름을 쓰는 중 오류가 발생했습니다.
Jaas LoginManager 구성 파일 (java.security.auth.login.config와 함께 제공됨) 및 주체의 정책 파일을 확인하는 것이 좋습니다. 전형적인 오류는 소문자로 된 도메인 이름입니다 : gino@AUTHDEMO.IT 대신 gino@authdemo.it
주체를 프로그래밍 방식으로 설정 / 참조하는 경우 코드에서 주체 이름 정확성을 검사 할 수도 있습니다. 문안 인사
from https://stackoverflow.com/questions/33829017/gssexception-no-valid-credentials-provided-mechanism-level-failed-to-find-any by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring에서 @Async 호출이 완료되었는지 확인하는 방법은 무엇입니까? (0) | 2019.07.13 |
---|---|
[SPRING] 스프링 부트 내의 전략 (0) | 2019.07.13 |
[SPRING] 봄과 봄 부팅의 차이점 (0) | 2019.07.13 |
[SPRING] 스프링 데이터 JPA의 동적 쿼리 (0) | 2019.07.13 |
[SPRING] JBoss EAP 6.1에서 스프링 부트 배포 (0) | 2019.07.13 |