2016-10-08 2 views
1

다른 응용 프로그램과 상호 작용할 때 응용 프로그램이 사용자를 가장해야하는 Java 웹 응용 프로그램에서 작업하고 있습니다. 특정 응용 프로그램 자체에는 권한이 적용되지 않으므로이 위임 메커니즘이 제대로 작동하는지가 중요합니다. 사용 된 인증 메커니즘은 Kerberos입니다.단위 테스트 용 ApacheDS 내장 Kerberos KDC

다양한 인증 측면을 검증하기 위해 JUnit과 함께 임베디드 KDC를 실행하고 싶습니다. ApacheDS를 사용하려고합니다. 몇 년 전에 LDAP로이 작업을 수행하는 방법에 대한 몇 가지 예가 있었고, 예를 들어 here을 따랐습니다.

@RunWith(FrameworkRunner.class) 
@CreateDS(name = "KerberosTcpITest", partitions = {@CreatePartition(name = "example", suffix = "dc=example,dc=com")}, additionalInterceptors = {KeyDerivationInterceptor.class}) 
@CreateLdapServer(transports = {@CreateTransport(protocol = "LDAP")}) 
@CreateKdcServer(transports = {@CreateTransport(protocol = "TCP", port = 6086)}) 
@ApplyLdifFiles("example.ldif") 
public class EmbeddedKerberos101 { 

    @Test 
    public void test() { 
    } 

} 

내가 LDIF 파일 스키마/OU = 스키마/CN = apachedns/OU =을 찾으려고 오류가 발생합니다 : 링크 된 예에 따라, 나는이 연기 테스트를 실행할 때, 1 단계 작업을 할 수 없습니다 objectclasses/m-oid = 1.3.6.1.4.1.18060.0.4.2.3.9.ldif는 내 @ApplyLdifFiles 주석처럼 보이지 않으며 기본값이 되돌려집니다.

스택 추적 : 내가

[libdefaults] 
default_realm = EXAMPLE.COM 

[realms] 
EXAMPLE.COM = { 
    kdc = localhost:6088 
} 

[domain_realm] 
.example.com = EXAMPLE.COM 
example.com = EXAMPLE.COM 

[login] 
krb4_convert = true 
krb4_get_tickets = false 

dn: dc=example,dc=com 
objectClass: top 
objectClass: domain 
dc: example 

dn: ou=users,dc=example,dc=com 
objectClass: top 
objectClass: organizationalUnit 
ou: users 

는 Example.ldif

을 krb5.conf에있는 내 테스트 자원

org.apache.directory.api.ldap.schema.extractor.UniqueResourceException: Problem locating LDIF file in schema repository 
Multiple copies of resource named 'schema/ou=schema/cn=apachedns/ou=objectclasses/m-oid=1.3.6.1.4.1.18060.0.4.2.3.9.ldif' located on classpath at urls 
jar:file:/Users/*/.m2/repository/org/apache/directory/api/api-ldap-schema-data/1.0.0-RC1/api-ldap-schema-data-1.0.0-RC1.jar!/schema/ou%3dschema/cn%3dapachedns/ou%3dobjectclasses/m-oid%3d1.3.6.1.4.1.18060.0.4.2.3.9.ldif 
jar:file:/Users/*/.m2/repository/org/apache/directory/server/apacheds-all/2.0.0-M15/apacheds-all-2.0.0-M15.jar!/schema/ou%3dschema/cn%3dapachedns/ou%3dobjectclasses/m-oid%3d1.3.6.1.4.1.18060.0.4.2.3.9.ldif 

at org.apache.directory.api.ldap.schema.extractor.impl.DefaultSchemaLdifExtractor.getUniqueResource(DefaultSchemaLdifExtractor.java:358) 
at org.apache.directory.api.ldap.schema.extractor.impl.DefaultSchemaLdifExtractor.getUniqueResourceAsStream(DefaultSchemaLdifExtractor.java:335) 
at org.apache.directory.api.ldap.schema.extractor.impl.DefaultSchemaLdifExtractor.extractFromClassLoader(DefaultSchemaLdifExtractor.java:373) 
at org.apache.directory.api.ldap.schema.extractor.impl.DefaultSchemaLdifExtractor.extractOrCopy(DefaultSchemaLdifExtractor.java:165) 
at org.apache.directory.api.ldap.schema.extractor.impl.DefaultSchemaLdifExtractor.extractOrCopy(DefaultSchemaLdifExtractor.java:185) 
at org.apache.directory.server.core.factory.DefaultDirectoryServiceFactory.initSchema(DefaultDirectoryServiceFactory.java:172) 
at org.apache.directory.server.core.factory.DefaultDirectoryServiceFactory.build(DefaultDirectoryServiceFactory.java:256) 
at org.apache.directory.server.core.factory.DefaultDirectoryServiceFactory.init(DefaultDirectoryServiceFactory.java:125) 
at org.apache.directory.server.core.factory.DSAnnotationProcessor.createDS(DSAnnotationProcessor.java:96) 
at org.apache.directory.server.core.factory.DSAnnotationProcessor.getDirectoryService(DSAnnotationProcessor.java:328) 
at org.apache.directory.server.core.integ.FrameworkRunner.run(FrameworkRunner.java:109) 

되어있을 이유가 왜 연기 테스트가 시작되지 않습니까? 인증 된 유닛/로컬 통합 테스트에서 모의 ​​KDC를 실행하기 위해 플러그 앤 플레이 방식의 대안이 있습니까? 자격 증명 위임 메커니즘을 테스트하는 다른 개발자들은 어떻게 작동합니까? 당신의 apacheds 종속성에서 API-LDAP 스키마 데이터 :

답변