Package org.eclipse.jetty.client.util
Class SPNEGOAuthentication
- java.lang.Object
-
- org.eclipse.jetty.client.util.AbstractAuthentication
-
- org.eclipse.jetty.client.util.SPNEGOAuthentication
-
- All Implemented Interfaces:
Authentication
public class SPNEGOAuthentication extends AbstractAuthentication
Implementation of the SPNEGO (or "Negotiate") authentication defined in RFC 4559.
A
user
is logged in via JAAS (either via userName/password or via userName/keyTab) once only.For every request that needs authentication, a
GSSContext
is initiated and later established after reading the response from the server.Applications should create objects of this class and add them to the
AuthenticationStore
retrieved from theHttpClient
viaHttpClient.getAuthenticationStore()
.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private class
SPNEGOAuthentication.PasswordCallbackHandler
private class
SPNEGOAuthentication.SPNEGOConfiguration
private static class
SPNEGOAuthentication.SPNEGOContext
static class
SPNEGOAuthentication.SPNEGOResult
-
Nested classes/interfaces inherited from interface org.eclipse.jetty.client.api.Authentication
Authentication.HeaderInfo, Authentication.Result
-
-
Field Summary
Fields Modifier and Type Field Description private org.ietf.jgss.GSSManager
gssManager
private static Logger
LOG
private static java.lang.String
NEGOTIATE
private boolean
renewTGT
private java.lang.String
serviceName
private java.nio.file.Path
ticketCachePath
private java.nio.file.Path
userKeyTabPath
private java.lang.String
userName
private java.lang.String
userPassword
private boolean
useTicketCache
-
Fields inherited from interface org.eclipse.jetty.client.api.Authentication
ANY_REALM
-
-
Constructor Summary
Constructors Constructor Description SPNEGOAuthentication(java.net.URI uri)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description Authentication.Result
authenticate(Request request, ContentResponse response, Authentication.HeaderInfo headerInfo, Attributes context)
Executes the authentication mechanism for the given request, returning aAuthentication.Result
that can be used to actually authenticate the request viaAuthentication.Result.apply(Request)
.java.lang.String
getServiceName()
java.nio.file.Path
getTicketCachePath()
java.lang.String
getType()
java.nio.file.Path
getUserKeyTabPath()
java.lang.String
getUserName()
java.lang.String
getUserPassword()
private java.security.PrivilegedAction<byte[]>
initGSSContext(SPNEGOAuthentication.SPNEGOContext spnegoContext, java.lang.String host, byte[] bytes)
boolean
isRenewTGT()
boolean
isUseTicketCache()
private SPNEGOAuthentication.SPNEGOContext
login()
void
setRenewTGT(boolean renewTGT)
void
setServiceName(java.lang.String serviceName)
void
setTicketCachePath(java.nio.file.Path ticketCachePath)
void
setUserKeyTabPath(java.nio.file.Path userKeyTabPath)
void
setUserName(java.lang.String userName)
void
setUserPassword(java.lang.String userPassword)
void
setUseTicketCache(boolean useTicketCache)
-
Methods inherited from class org.eclipse.jetty.client.util.AbstractAuthentication
getRealm, getURI, matches, matchesURI
-
-
-
-
Field Detail
-
LOG
private static final Logger LOG
-
NEGOTIATE
private static final java.lang.String NEGOTIATE
-
gssManager
private final org.ietf.jgss.GSSManager gssManager
-
userName
private java.lang.String userName
-
userPassword
private java.lang.String userPassword
-
userKeyTabPath
private java.nio.file.Path userKeyTabPath
-
serviceName
private java.lang.String serviceName
-
useTicketCache
private boolean useTicketCache
-
ticketCachePath
private java.nio.file.Path ticketCachePath
-
renewTGT
private boolean renewTGT
-
-
Method Detail
-
getType
public java.lang.String getType()
- Specified by:
getType
in classAbstractAuthentication
-
getUserName
public java.lang.String getUserName()
- Returns:
- the user name of the user to login
-
setUserName
public void setUserName(java.lang.String userName)
- Parameters:
userName
- user name of the user to login
-
getUserPassword
public java.lang.String getUserPassword()
- Returns:
- the password of the user to login
-
setUserPassword
public void setUserPassword(java.lang.String userPassword)
- Parameters:
userPassword
- the password of the user to login- See Also:
setUserKeyTabPath(Path)
-
getUserKeyTabPath
public java.nio.file.Path getUserKeyTabPath()
- Returns:
- the path of the keyTab file with the user credentials
-
setUserKeyTabPath
public void setUserKeyTabPath(java.nio.file.Path userKeyTabPath)
- Parameters:
userKeyTabPath
- the path of the keyTab file with the user credentials- See Also:
setUserPassword(String)
-
getServiceName
public java.lang.String getServiceName()
- Returns:
- the name of the service to use
-
setServiceName
public void setServiceName(java.lang.String serviceName)
- Parameters:
serviceName
- the name of the service to use
-
isUseTicketCache
public boolean isUseTicketCache()
- Returns:
- whether to use the ticket cache during login
-
setUseTicketCache
public void setUseTicketCache(boolean useTicketCache)
- Parameters:
useTicketCache
- whether to use the ticket cache during login- See Also:
setTicketCachePath(Path)
-
getTicketCachePath
public java.nio.file.Path getTicketCachePath()
- Returns:
- the path of the ticket cache file
-
setTicketCachePath
public void setTicketCachePath(java.nio.file.Path ticketCachePath)
- Parameters:
ticketCachePath
- the path of the ticket cache file- See Also:
setUseTicketCache(boolean)
-
isRenewTGT
public boolean isRenewTGT()
- Returns:
- whether to renew the ticket granting ticket
-
setRenewTGT
public void setRenewTGT(boolean renewTGT)
- Parameters:
renewTGT
- whether to renew the ticket granting ticket
-
authenticate
public Authentication.Result authenticate(Request request, ContentResponse response, Authentication.HeaderInfo headerInfo, Attributes context)
Description copied from interface:Authentication
Executes the authentication mechanism for the given request, returning aAuthentication.Result
that can be used to actually authenticate the request viaAuthentication.Result.apply(Request)
.If a request for
"/secure"
returns aAuthentication.Result
, then the result may be used for other requests such as"/secure/foo"
or"/secure/bar"
, unless those resources are protected by other realms.- Parameters:
request
- the request to execute the authentication mechanism forresponse
- the 401 response obtained in the previous attempt to request the protected resourceheaderInfo
- theWWW-Authenticate
(orProxy-Authenticate
) header chosen for this authentication (among the many that the response may contain)context
- the conversation context in case the authentication needs multiple exchanges to be completed and information needs to be stored across exchanges- Returns:
- the authentication result, or null if the authentication could not be performed
-
login
private SPNEGOAuthentication.SPNEGOContext login()
-
initGSSContext
private java.security.PrivilegedAction<byte[]> initGSSContext(SPNEGOAuthentication.SPNEGOContext spnegoContext, java.lang.String host, byte[] bytes)
-
-