Class SpnegoHttpURLConnection

java.lang.Object
com.kerb4j.client.SpnegoHttpURLConnection

public final class SpnegoHttpURLConnection extends Object
This Class may be used by custom clients as a convenience when connecting to a protected HTTP server.

This mechanism is an alternative to HTTP Basic Authentication where the HTTP server does not support Basic Auth but instead has SPNEGO support

A krb5.conf and a login.conf is required when using this class. Take a look at the spnego.sourceforge.net documentation for an example krb5.conf file. Also, you must provide a keytab file, or a username and password, or allowtgtsessionkey.

Example usage (username/password):

     public static void main(final String[] args) throws Exception {
         System.setProperty("java.security.krb5.conf", "krb5.conf");
         System.setProperty("sun.security.krb5.debug", "true");
         System.setProperty("java.security.auth.login.config", "login.conf");

         SpnegoHttpURLConnection spnego = null;

         try {
             spnego = new SpnegoHttpURLConnection("spnego-client", "dfelix", "myp@s5");
             spnego.connect(new URL("http://medusa:8080/index.jsp"));

             System.out.println(spnego.getResponseCode());

         } finally {
             if (null != spnego) {
                 spnego.disconnect();
             }
         }
     }
 

Alternatively, if the server supports HTTP Basic Authentication, this Class is NOT needed and instead you can do something like the following:

     public static void main(final String[] args) throws Exception {
         final String creds = "dfelix:myp@s5";

         final String token = Base64.encodeImpl(creds.getBytes());

         URL url = new URL("http://medusa:8080/index.jsp");

         HttpURLConnection conn = (HttpURLConnection) url.openConnection();

         conn.setRequestProperty(Constants.AUTHZ_HEADER
                 , Constants.BASIC_HEADER + " " + token);

         conn.connect();

         System.out.println("Response Code:" + conn.getResponseCode());
     }
 

To see a working example and instructions on how to use a keytab, take a look at the creating a client keytab example.

Author:
Darwin V. Felix
  • Constructor Details

    • SpnegoHttpURLConnection

      @Deprecated public SpnegoHttpURLConnection(String loginModuleName) throws LoginException
      Deprecated.
      Creates an instance where the LoginContext relies on a keytab file being specified by "java.security.auth.login.config" or where LoginContext relies on tgtsessionkey.
      Parameters:
      loginModuleName - loginModuleName
      Throws:
      LoginException - LoginException
    • SpnegoHttpURLConnection

      @Deprecated public SpnegoHttpURLConnection(String loginModuleName, String username, String password) throws LoginException
      Deprecated.
      Creates an instance where the LoginContext does not require a keytab file. However, the "java.security.auth.login.config" property must still be set prior to instantiating this object.
      Parameters:
      loginModuleName - loginModuleName
      username - username
      password - password
      Throws:
      LoginException - LoginException
    • SpnegoHttpURLConnection

      public SpnegoHttpURLConnection(SpnegoClient spnegoClient)
  • Method Details