
org.ldaptive.provider.apache.ApacheLdapSaslUtils Maven / Gradle / Ivy
/* See LICENSE for licensing and NOTICE for copyright. */
package org.ldaptive.provider.apache;
import javax.security.auth.login.Configuration;
import org.apache.directory.api.ldap.model.constants.SaslQoP;
import org.apache.directory.api.ldap.model.constants.SaslSecurityStrength;
import org.apache.directory.ldap.client.api.SaslCramMd5Request;
import org.apache.directory.ldap.client.api.SaslDigestMd5Request;
import org.apache.directory.ldap.client.api.SaslGssApiRequest;
import org.ldaptive.Credential;
import org.ldaptive.sasl.DigestMd5Config;
import org.ldaptive.sasl.GssApiConfig;
import org.ldaptive.sasl.QualityOfProtection;
import org.ldaptive.sasl.SaslConfig;
import org.ldaptive.sasl.SecurityStrength;
/**
* Support for SASL authentication.
*
* @author Middleware Services
*/
public final class ApacheLdapSaslUtils
{
/** Default constructor. */
private ApacheLdapSaslUtils() {}
/**
* Creates a new digest md5 request.
*
* @param username to bind as
* @param credential to bind with
* @param config to set sasl parameters
*
* @return digest md5 request
*/
protected static SaslDigestMd5Request createDigestMd5Request(
final String username,
final Credential credential,
final SaslConfig config)
{
final SaslDigestMd5Request request = new SaslDigestMd5Request();
if (username != null) {
request.setUsername(username);
}
if (credential != null) {
request.setCredentials(credential.getBytes());
}
if (config.getAuthorizationId() != null && !"".equals(config.getAuthorizationId())) {
request.setAuthorizationId(config.getAuthorizationId());
}
if (config.getMutualAuthentication() != null) {
request.setMutualAuthentication(config.getMutualAuthentication());
}
if (config.getQualityOfProtection() != null) {
request.setQualityOfProtection(getQualityOfProtection(config.getQualityOfProtection()));
}
if (config.getSecurityStrength() != null) {
request.setSecurityStrength(getSecurityStrength(config.getSecurityStrength()));
}
if (config instanceof DigestMd5Config) {
final DigestMd5Config c = (DigestMd5Config) config;
if (c.getRealm() != null) {
request.setRealmName(c.getRealm());
}
}
return request;
}
/**
* Creates a new cram md5 request.
*
* @param username to bind as
* @param credential to bind with
* @param config to set sasl parameters
*
* @return cram md5 request
*/
protected static SaslCramMd5Request createCramMd5Request(
final String username,
final Credential credential,
final SaslConfig config)
{
final SaslCramMd5Request request = new SaslCramMd5Request();
if (username != null) {
request.setUsername(username);
}
if (credential != null) {
request.setCredentials(credential.getBytes());
}
if (config.getAuthorizationId() != null && !"".equals(config.getAuthorizationId())) {
request.setAuthorizationId(config.getAuthorizationId());
}
if (config.getMutualAuthentication() != null) {
request.setMutualAuthentication(config.getMutualAuthentication());
}
if (config.getQualityOfProtection() != null) {
request.setQualityOfProtection(getQualityOfProtection(config.getQualityOfProtection()));
}
if (config.getSecurityStrength() != null) {
request.setSecurityStrength(getSecurityStrength(config.getSecurityStrength()));
}
return request;
}
/**
* Creates a new gssapi request.
*
* @param username to bind as
* @param credential to bind with
* @param config to set sasl parameters
*
* @return gssapi request
*/
protected static SaslGssApiRequest createGssApiRequest(
final String username,
final Credential credential,
final SaslConfig config)
{
final SaslGssApiRequest request = new SaslGssApiRequest();
if (username != null) {
request.setUsername(username);
}
if (credential != null) {
request.setCredentials(credential.getBytes());
}
if (config.getAuthorizationId() != null) {
request.setAuthorizationId(config.getAuthorizationId());
}
if (config.getMutualAuthentication() != null) {
request.setMutualAuthentication(config.getMutualAuthentication());
}
if (config.getQualityOfProtection() != null) {
request.setQualityOfProtection(getQualityOfProtection(config.getQualityOfProtection()));
}
if (config.getSecurityStrength() != null) {
request.setSecurityStrength(getSecurityStrength(config.getSecurityStrength()));
}
if (config instanceof GssApiConfig) {
final GssApiConfig c = (GssApiConfig) config;
if (c.getRealm() != null) {
request.setRealmName(c.getRealm());
}
}
final String realm = System.getProperty("java.security.krb5.realm");
if (realm != null) {
request.setRealmName(realm);
}
final String kdcHost = System.getProperty("java.security.krb5.kdc");
if (kdcHost != null) {
request.setKdcHost(kdcHost);
}
final String loginConfig = System.getProperty("java.security.auth.login.config");
if (loginConfig != null) {
request.setLoginModuleConfiguration(Configuration.getConfiguration());
}
request.setLoginContextName("com.sun.security.jgss.initiate");
return request;
}
/**
* Returns the SASL quality of protection string for the supplied enum.
*
* @param qop quality of protection enum
*
* @return SASL quality of protection
*/
protected static SaslQoP getQualityOfProtection(final QualityOfProtection qop)
{
SaslQoP e;
switch (qop) {
case AUTH:
e = SaslQoP.AUTH;
break;
case AUTH_INT:
e = SaslQoP.AUTH_INT;
break;
case AUTH_CONF:
e = SaslQoP.AUTH_CONF;
break;
default:
throw new IllegalArgumentException("Unknown SASL quality of protection: " + qop);
}
return e;
}
/**
* Returns the SASL security strength string for the supplied enum.
*
* @param ss security strength enum
*
* @return SASL security strength
*/
protected static SaslSecurityStrength getSecurityStrength(final SecurityStrength ss)
{
SaslSecurityStrength e;
switch (ss) {
case HIGH:
e = SaslSecurityStrength.HIGH;
break;
case MEDIUM:
e = SaslSecurityStrength.MEDIUM;
break;
case LOW:
e = SaslSecurityStrength.LOW;
break;
default:
throw new IllegalArgumentException("Unknown SASL security strength: " + ss);
}
return e;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy