Example usage for javax.security.auth.login LoginContext LoginContext

List of usage examples for javax.security.auth.login LoginContext LoginContext

Introduction

In this page you can find the example usage for javax.security.auth.login LoginContext LoginContext.

Prototype

public LoginContext(String name, Subject subject, CallbackHandler callbackHandler, Configuration config)
        throws LoginException 

Source Link

Document

Instantiate a new LoginContext object with a name, a Subject to be authenticated, a CallbackHandler object, and a login Configuration .

Usage

From source file:net.java.jaspicoil.MSPacSpnegoServerAuthModule.java

private Subject fetchSubjectFromLoginModule(String jaasContextName, Subject subject,
        Krb5LoginConfig loginConfig) throws LoginException {
    debug("Try to create a context LM for jassname={0}, subject={1}, config={2}", jaasContextName, subject,
            loginConfig);//  w  w  w .j  a v  a2 s . co m
    final LoginContext lc = new LoginContext(jaasContextName, subject, null, loginConfig);
    lc.login();
    return lc.getSubject();
}

From source file:io.druid.security.kerberos.KerberosAuthenticator.java

private void initializeKerberosLogin() throws ServletException {
    String principal;/*  w  w  w .  j  a  v  a2 s.  c  o  m*/
    String keytab;

    try {
        principal = SecurityUtil.getServerPrincipal(serverPrincipal, node.getHost());
        if (principal == null || principal.trim().length() == 0) {
            throw new ServletException("Principal not defined in configuration");
        }
        keytab = serverKeytab;
        if (keytab == null || keytab.trim().length() == 0) {
            throw new ServletException("Keytab not defined in configuration");
        }
        if (!new File(keytab).exists()) {
            throw new ServletException("Keytab does not exist: " + keytab);
        }

        Set<Principal> principals = new HashSet<Principal>();
        principals.add(new KerberosPrincipal(principal));
        Subject subject = new Subject(false, principals, new HashSet<Object>(), new HashSet<Object>());

        DruidKerberosConfiguration kerberosConfiguration = new DruidKerberosConfiguration(keytab, principal);

        log.info("Login using keytab " + keytab + ", for principal " + principal);
        loginContext = new LoginContext("", subject, null, kerberosConfiguration);
        loginContext.login();

        log.info("Initialized, principal %s from keytab %s", principal, keytab);
    } catch (Exception ex) {
        throw new ServletException(ex);
    }
}

From source file:org.adeptnet.auth.kerberos.Krb5.java

public String isTicketValid(String spn, byte[] ticket) {
    checkCreds();//  w  ww.  j  a v a 2  s . c o  m
    LoginContext ctx = null;
    try {
        if (!config.getKeytab().exists()) {
            throw new LoginException(
                    String.format("KeyTab does not exist: %s", config.getKeytab().getAbsolutePath()));
        }
        final Principal principal = new KerberosPrincipal(spn, KerberosPrincipal.KRB_NT_SRV_INST);
        Set<Principal> principals = new HashSet<>();
        principals.add(principal);

        final Subject subject = new Subject(false, principals, new HashSet<>(), new HashSet<>());

        ctx = new LoginContext(config.getContextName(), subject, null, getJaasKrb5TicketCfg(spn));
        ctx.login();

        final Krb5TicketValidateAction validateAction = new Krb5TicketValidateAction(ticket, spn);
        final String username = Subject.doAs(subject, validateAction);
        return username;
    } catch (java.security.PrivilegedActionException | LoginException e) {
        LOG.fatal(spn, e);
    } finally {
        try {
            if (ctx != null) {
                ctx.logout();
            }
        } catch (LoginException e2) {
            LOG.fatal(spn, e2);
        }
    }

    return FAILED;
}

From source file:org.apache.druid.security.kerberos.DruidKerberosAuthenticationHandler.java

@Override
public void init(Properties config) throws ServletException {
    try {/*  www  .jav  a 2  s.c om*/
        String principal = config.getProperty(PRINCIPAL);
        if (principal == null || principal.trim().length() == 0) {
            throw new ServletException("Principal not defined in configuration");
        }
        keytab = config.getProperty(KEYTAB, keytab);
        if (keytab == null || keytab.trim().length() == 0) {
            throw new ServletException("Keytab not defined in configuration");
        }
        if (!new File(keytab).exists()) {
            throw new ServletException("Keytab does not exist: " + keytab);
        }

        // use all SPNEGO principals in the keytab if a principal isn't
        // specifically configured
        final String[] spnegoPrincipals;
        if ("*".equals(principal)) {
            spnegoPrincipals = KerberosUtil.getPrincipalNames(keytab, Pattern.compile("HTTP/.*"));
            if (spnegoPrincipals.length == 0) {
                throw new ServletException("Principals do not exist in the keytab");
            }
        } else {
            spnegoPrincipals = new String[] { principal };
        }

        String nameRules = config.getProperty(NAME_RULES, null);
        if (nameRules != null) {
            KerberosName.setRules(nameRules);
        }

        for (String spnegoPrincipal : spnegoPrincipals) {
            log.info("Login using keytab %s, for principal %s", keytab, spnegoPrincipal);
            final KerberosAuthenticator.DruidKerberosConfiguration kerberosConfiguration = new KerberosAuthenticator.DruidKerberosConfiguration(
                    keytab, spnegoPrincipal);
            final LoginContext loginContext = new LoginContext("", serverSubject, null, kerberosConfiguration);
            try {
                loginContext.login();
            } catch (LoginException le) {
                log.warn(le, "Failed to login as [%s]", spnegoPrincipal);
                throw new AuthenticationException(le);
            }
            loginContexts.add(loginContext);
        }
        try {
            gssManager = Subject.doAs(serverSubject, new PrivilegedExceptionAction<GSSManager>() {

                @Override
                public GSSManager run() {
                    return GSSManager.getInstance();
                }
            });
        } catch (PrivilegedActionException ex) {
            throw ex.getException();
        }
    } catch (Exception ex) {
        throw new ServletException(ex);
    }
}

From source file:org.apache.druid.security.kerberos.KerberosAuthenticator.java

private void initializeKerberosLogin() throws ServletException {
    String keytab;//from ww  w  .  ja  v  a  2  s .  c  o m

    try {
        if (serverPrincipal == null || serverPrincipal.trim().length() == 0) {
            throw new ServletException("Principal not defined in configuration");
        }
        keytab = serverKeytab;
        if (keytab == null || keytab.trim().length() == 0) {
            throw new ServletException("Keytab not defined in configuration");
        }
        if (!new File(keytab).exists()) {
            throw new ServletException("Keytab does not exist: " + keytab);
        }

        Set<Principal> principals = new HashSet<Principal>();
        principals.add(new KerberosPrincipal(serverPrincipal));
        Subject subject = new Subject(false, principals, new HashSet<Object>(), new HashSet<Object>());

        DruidKerberosConfiguration kerberosConfiguration = new DruidKerberosConfiguration(keytab,
                serverPrincipal);

        log.info("Login using keytab " + keytab + ", for principal " + serverPrincipal);
        loginContext = new LoginContext("", subject, null, kerberosConfiguration);
        loginContext.login();

        log.info("Initialized, principal %s from keytab %s", serverPrincipal, keytab);
    } catch (Exception ex) {
        throw new ServletException(ex);
    }
}

From source file:org.apache.hadoop.io.crypto.tool.kerberos.SpnegoRestCli.java

public StringBuffer getResult() throws Exception {
    AccessControlContext context = AccessController.getContext();
    Subject subject = Subject.getSubject(context);
    if (subject == null) {
        subject = new Subject();
        LoginContext login = new LoginContext("", subject, null, new KerberosConfiguration());
        login.login();/*from  w ww .  j  av a 2s. co  m*/
    }
    Subject.doAs(subject, new PrivilegedExceptionAction<Void>() {
        @Override
        public Void run() throws Exception {
            sb = new RestClient(url).getResult();
            return null;
        }
    });
    return sb;
}

From source file:org.apache.hadoop.registry.secure.AbstractSecureRegistryTest.java

/**
 * Log in, defaulting to the client context
 * @param principal principal//from  w ww.  j  av  a2s  .c  om
 * @param context context
 * @param keytab keytab
 * @return the logged in context
 * @throws LoginException failure to log in
 * @throws FileNotFoundException no keytab
 */
protected LoginContext login(String principal, String context, File keytab)
        throws LoginException, FileNotFoundException {
    LOG.info("Logging in as {} in context {} with keytab {}", principal, context, keytab);
    if (!keytab.exists()) {
        throw new FileNotFoundException(keytab.getAbsolutePath());
    }
    Set<Principal> principals = new HashSet<Principal>();
    principals.add(new KerberosPrincipal(principal));
    Subject subject = new Subject(false, principals, new HashSet<Object>(), new HashSet<Object>());
    LoginContext login;
    login = new LoginContext(context, subject, null,
            KerberosConfiguration.createClientConfig(principal, keytab));
    login.login();
    return login;
}

From source file:org.apache.hadoop.registry.secure.TestSecureLogins.java

public LoginContext createLoginContextZookeeperLocalhost() throws LoginException {
    String principalAndRealm = getPrincipalAndRealm(ZOOKEEPER_LOCALHOST);
    Set<Principal> principals = new HashSet<Principal>();
    principals.add(new KerberosPrincipal(ZOOKEEPER_LOCALHOST));
    Subject subject = new Subject(false, principals, new HashSet<Object>(), new HashSet<Object>());
    return new LoginContext("", subject, null,
            KerberosConfiguration.createServerConfig(ZOOKEEPER_LOCALHOST, keytab_zk));
}

From source file:org.apache.hadoop.security.authentication.client.KerberosAuthenticator.java

/**
 * Implements the SPNEGO authentication sequence interaction using the current default principal
 * in the Kerberos cache (normally set via kinit).
 *
 * @param token the authentication token being used for the user.
 *
 * @throws IOException if an IO error occurred.
 * @throws AuthenticationException if an authentication error occurred.
 *//*w w  w  .ja  v a  2 s .  c o m*/
private void doSpnegoSequence(AuthenticatedURL.Token token) throws IOException, AuthenticationException {
    try {
        AccessControlContext context = AccessController.getContext();
        Subject subject = Subject.getSubject(context);
        if (subject == null) {
            subject = new Subject();
            LoginContext login = new LoginContext("", subject, null, new KerberosConfiguration());
            login.login();
        }
        Subject.doAs(subject, new PrivilegedExceptionAction<Void>() {

            @Override
            public Void run() throws Exception {
                GSSContext gssContext = null;
                try {
                    GSSManager gssManager = GSSManager.getInstance();
                    String servicePrincipal = "HTTP/" + KerberosAuthenticator.this.url.getHost();
                    Oid oid = KerberosUtil.getOidInstance("NT_GSS_KRB5_PRINCIPAL");
                    GSSName serviceName = gssManager.createName(servicePrincipal, oid);
                    oid = KerberosUtil.getOidInstance("GSS_KRB5_MECH_OID");
                    gssContext = gssManager.createContext(serviceName, oid, null, GSSContext.DEFAULT_LIFETIME);
                    gssContext.requestCredDeleg(true);
                    gssContext.requestMutualAuth(true);

                    byte[] inToken = new byte[0];
                    byte[] outToken;
                    boolean established = false;

                    // Loop while the context is still not established
                    while (!established) {
                        outToken = gssContext.initSecContext(inToken, 0, inToken.length);
                        if (outToken != null) {
                            sendToken(outToken);
                        }

                        if (!gssContext.isEstablished()) {
                            inToken = readToken();
                        } else {
                            established = true;
                        }
                    }
                } finally {
                    if (gssContext != null) {
                        gssContext.dispose();
                        gssContext = null;
                    }
                }
                return null;
            }
        });
    } catch (PrivilegedActionException ex) {
        throw new AuthenticationException(ex.getException());
    } catch (LoginException ex) {
        throw new AuthenticationException(ex);
    }
    AuthenticatedURL.extractToken(conn, token);
}

From source file:org.apache.hadoop.security.authentication.server.KerberosAuthenticationHandler.java

/**
 * Initializes the authentication handler instance.
 * <p/>/*from w w  w  .ja v  a2  s.  co m*/
 * It creates a Kerberos context using the principal and keytab specified in the configuration.
 * <p/>
 * This method is invoked by the {@link AuthenticationFilter#init} method.
 *
 * @param config configuration properties to initialize the handler.
 *
 * @throws ServletException thrown if the handler could not be initialized.
 */
@Override
public void init(Properties config) throws ServletException {
    try {
        principal = config.getProperty(PRINCIPAL, principal);
        if (principal == null || principal.trim().length() == 0) {
            throw new ServletException("Principal not defined in configuration");
        }
        keytab = config.getProperty(KEYTAB, keytab);
        if (keytab == null || keytab.trim().length() == 0) {
            throw new ServletException("Keytab not defined in configuration");
        }
        if (!new File(keytab).exists()) {
            throw new ServletException("Keytab does not exist: " + keytab);
        }

        Set<Principal> principals = new HashSet<Principal>();
        principals.add(new KerberosPrincipal(principal));
        Subject subject = new Subject(false, principals, new HashSet<Object>(), new HashSet<Object>());

        KerberosConfiguration kerberosConfiguration = new KerberosConfiguration(keytab, principal);

        LOG.info("Login using keytab " + keytab + ", for principal " + principal);
        loginContext = new LoginContext("", subject, null, kerberosConfiguration);
        loginContext.login();

        Subject serverSubject = loginContext.getSubject();
        try {
            gssManager = Subject.doAs(serverSubject, new PrivilegedExceptionAction<GSSManager>() {

                @Override
                public GSSManager run() throws Exception {
                    return GSSManager.getInstance();
                }
            });
        } catch (PrivilegedActionException ex) {
            throw ex.getException();
        }
        LOG.info("Initialized, principal [{}] from keytab [{}]", principal, keytab);
    } catch (Exception ex) {
        throw new ServletException(ex);
    }
}