Search in sources :

Example 16 with RealmCallback

use of javax.security.sasl.RealmCallback in project jstorm by alibaba.

the class ClientCallbackHandler method handle.

/**
     * This method is invoked by SASL for authentication challenges
     * 
     * @param callbacks a collection of challenge callbacks
     */
public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
    for (Callback c : callbacks) {
        if (c instanceof NameCallback) {
            LOG.debug("name callback");
            NameCallback nc = (NameCallback) c;
            nc.setName(_username);
        } else if (c instanceof PasswordCallback) {
            LOG.debug("password callback");
            PasswordCallback pc = (PasswordCallback) c;
            if (_password != null) {
                pc.setPassword(_password.toCharArray());
            }
        } else if (c instanceof AuthorizeCallback) {
            LOG.debug("authorization callback");
            AuthorizeCallback ac = (AuthorizeCallback) c;
            String authid = ac.getAuthenticationID();
            String authzid = ac.getAuthorizationID();
            if (authid.equals(authzid)) {
                ac.setAuthorized(true);
            } else {
                ac.setAuthorized(false);
            }
            if (ac.isAuthorized()) {
                ac.setAuthorizedID(authzid);
            }
        } else if (c instanceof RealmCallback) {
            RealmCallback rc = (RealmCallback) c;
            ((RealmCallback) c).setText(rc.getDefaultText());
        } else {
            throw new UnsupportedCallbackException(c);
        }
    }
}
Also used : RealmCallback(javax.security.sasl.RealmCallback) PasswordCallback(javax.security.auth.callback.PasswordCallback) NameCallback(javax.security.auth.callback.NameCallback) AuthorizeCallback(javax.security.sasl.AuthorizeCallback) Callback(javax.security.auth.callback.Callback) NameCallback(javax.security.auth.callback.NameCallback) PasswordCallback(javax.security.auth.callback.PasswordCallback) UnsupportedCallbackException(javax.security.auth.callback.UnsupportedCallbackException) AuthorizeCallback(javax.security.sasl.AuthorizeCallback) RealmCallback(javax.security.sasl.RealmCallback)

Example 17 with RealmCallback

use of javax.security.sasl.RealmCallback in project jdk8u_jdk by JetBrains.

the class SaslGSS method main.

public static void main(String[] args) throws Exception {
    String name = "host." + OneKDC.REALM.toLowerCase(Locale.US);
    new OneKDC(null).writeJAASConf();
    System.setProperty("javax.security.auth.useSubjectCredsOnly", "false");
    // Client in JGSS so that it can control wrap privacy mode
    GSSManager m = GSSManager.getInstance();
    GSSContext sc = m.createContext(m.createName(OneKDC.SERVER, GSSUtil.NT_GSS_KRB5_PRINCIPAL), GSSUtil.GSS_KRB5_MECH_OID, null, GSSContext.DEFAULT_LIFETIME);
    sc.requestMutualAuth(false);
    // Server in SASL
    final HashMap props = new HashMap();
    props.put(Sasl.QOP, "auth-conf");
    SaslServer ss = Sasl.createSaslServer("GSSAPI", "server", name, props, new CallbackHandler() {

        public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
            for (Callback cb : callbacks) {
                if (cb instanceof RealmCallback) {
                    ((RealmCallback) cb).setText(OneKDC.REALM);
                } else if (cb instanceof AuthorizeCallback) {
                    ((AuthorizeCallback) cb).setAuthorized(true);
                }
            }
        }
    });
    ByteArrayOutputStream bout = new ByteArrayOutputStream();
    PrintStream oldErr = System.err;
    System.setErr(new PrintStream(bout));
    Logger.getLogger("javax.security.sasl").setLevel(Level.ALL);
    Handler h = new ConsoleHandler();
    h.setLevel(Level.ALL);
    Logger.getLogger("javax.security.sasl").addHandler(h);
    byte[] token = new byte[0];
    try {
        // Handshake
        token = sc.initSecContext(token, 0, token.length);
        token = ss.evaluateResponse(token);
        token = sc.unwrap(token, 0, token.length, new MessageProp(0, false));
        token[0] = (byte) (((token[0] & 4) != 0) ? 4 : 2);
        token = sc.wrap(token, 0, token.length, new MessageProp(0, false));
        ss.evaluateResponse(token);
    } finally {
        System.setErr(oldErr);
    }
    // Talk
    // 1. Client sends a auth-int message
    byte[] hello = "hello".getBytes();
    MessageProp qop = new MessageProp(0, false);
    token = sc.wrap(hello, 0, hello.length, qop);
    // 2. Server accepts it anyway
    ss.unwrap(token, 0, token.length);
    // 3. Server sends a message
    token = ss.wrap(hello, 0, hello.length);
    // 4. Client accepts, should be auth-conf
    sc.unwrap(token, 0, token.length, qop);
    if (!qop.getPrivacy()) {
        throw new Exception();
    }
    for (String s : bout.toString().split("\\n")) {
        if (s.contains("KRB5SRV04") && s.contains("NULL")) {
            return;
        }
    }
    System.out.println("=======================");
    System.out.println(bout.toString());
    System.out.println("=======================");
    throw new Exception("Haven't seen KRB5SRV04 with NULL");
}
Also used : PrintStream(java.io.PrintStream) CallbackHandler(javax.security.auth.callback.CallbackHandler) HashMap(java.util.HashMap) SaslServer(javax.security.sasl.SaslServer) CallbackHandler(javax.security.auth.callback.CallbackHandler) ConsoleHandler(java.util.logging.ConsoleHandler) Handler(java.util.logging.Handler) IOException(java.io.IOException) ByteArrayOutputStream(java.io.ByteArrayOutputStream) ConsoleHandler(java.util.logging.ConsoleHandler) AuthorizeCallback(javax.security.sasl.AuthorizeCallback) UnsupportedCallbackException(javax.security.auth.callback.UnsupportedCallbackException) IOException(java.io.IOException) RealmCallback(javax.security.sasl.RealmCallback) AuthorizeCallback(javax.security.sasl.AuthorizeCallback) Callback(javax.security.auth.callback.Callback) UnsupportedCallbackException(javax.security.auth.callback.UnsupportedCallbackException) RealmCallback(javax.security.sasl.RealmCallback)

Aggregations

RealmCallback (javax.security.sasl.RealmCallback)17 NameCallback (javax.security.auth.callback.NameCallback)14 PasswordCallback (javax.security.auth.callback.PasswordCallback)13 UnsupportedCallbackException (javax.security.auth.callback.UnsupportedCallbackException)11 Callback (javax.security.auth.callback.Callback)10 AuthorizeCallback (javax.security.sasl.AuthorizeCallback)7 IOException (java.io.IOException)3 CallbackHandler (javax.security.auth.callback.CallbackHandler)3 RealmChoiceCallback (javax.security.sasl.RealmChoiceCallback)3 Test (org.junit.Test)3 TextOutputCallback (javax.security.auth.callback.TextOutputCallback)2 ByteArrayOutputStream (java.io.ByteArrayOutputStream)1 PrintStream (java.io.PrintStream)1 HashMap (java.util.HashMap)1 Set (java.util.Set)1 ConsoleHandler (java.util.logging.ConsoleHandler)1 Handler (java.util.logging.Handler)1 LoginException (javax.security.auth.login.LoginException)1 SaslException (javax.security.sasl.SaslException)1 SaslServer (javax.security.sasl.SaslServer)1