public interface AuthenticationMechanism
extends com.maverick.ssh.components.SshComponent
Each authentication mechanism the server supports should implement
this interface. When an authentication request is received from the client
the server looks up the authentication method name, for example "password"
from the com.maverick.sshd.ConfigurationContext. To support a new type
of SSH authentication mechanism, or to overide an existing
implementation you should add its Class object to the ConfigurationContext. This
can be acheived by adding the following code to your
SshDaemon code implementation of the
com.maverick.sshd.SshDaemon#configure(ConfigurationContext) method.
protected void configure(ConfigurationContext context) {
context.supportedAuthenticationMechanisms().add(
"kerberos@sshtools.com",
Class.forName("com.sshtools.kerberos.SSHKerberos"));
}
The SSH protocol recommends that method names are in the name@domain.com syntax.
The server will initialize your authentication object first by calling the
#init(com.maverick.sshd.TransportProtocol, com.maverick.sshd.AuthenticationProtocol, byte[]) method, you should save the variables provided as these will
be required to communicate back to the client. Once initialized the
transaction will be started by the server by calling the startRequest(java.lang.String, byte[])
method. Here you will be provided with the users' name and the request specific
data. How you proceed from here depends upon the authentication mechanism, in
the standard password authentication mechanism, the password is provided in the
request data and a native login takes place. If the authentication is
successful your implementation should call the AuthenticationProtocol.completedAuthentication()
method, if it fails call AuthenticationProtocol.failedAuthentication()
instead.
If your mechanism require further SSH messages to be sent you send them
using com.maverick.sshd.TransportProtocol#sendMessage(SshMessage) and
messages sent by the client will be received by your
processMessage(byte[])
implementation.
| Modifier and Type | Method and Description |
|---|---|
String |
getName()
Return the SSH method name for this authentication.
|
boolean |
isPassword()
Is this password authentication? We use this so user does not end up having to submit their
password if an alternative method provides password authentication but is not the core "password"
method (for example keyboard-interactive).
|
boolean |
processMessage(byte[] msg)
If the SSH protocol authentication method defines additional messages
which are sent from the client, they will be passed into your
implementation here when received.
|
boolean |
startRequest(String username,
byte[] msg)
Start an authentication transaction.
|
boolean startRequest(String username, byte[] msg) throws IOException
AuthenticationProtocol
instance that was passed in the initialization process. The request
data varies according to the authentication method.
if (success) authentication.completedAuthentication(method, username, service); else authentication.failedAuthentication(method);
msg - the request data from the SSH_MSG_USERAUTH_REQUEST messageIOExceptionboolean processMessage(byte[] msg)
throws IOException
msg - IOExceptionString getName()
getName in interface com.maverick.ssh.components.SshComponentboolean isPassword()
Copyright © 2012. All Rights Reserved.