AuthenticationPlugin
Date: 2016-03-08

com.mysql.jdbc

## Interface AuthenticationPlugin

- All Superinterfaces:
    Extension

      public interface AuthenticationPlugin
      extends Extension

  Implementors of this interface can be installed via the "authenticationPlugins" configuration property. The driver will create one instance of a given plugin per `MysqlIO` instance if it's reusable (see `isReusable()`) or a new instance in each `MysqlIO.proceedHandshakeWithPluggableAuthentication(String, String, String, Buffer)` call.

- - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `java.lang.String` | `getProtocolPluginName()` Returns the name that the MySQL server uses on the wire for this plugin
    `boolean` | `isReusable()`
    `boolean` | `nextAuthenticationStep(Buffer fromServer, java.util.List<Buffer> toServer)` Process authentication handshake data from server and optionally produce data to be sent back to the server.
    `boolean` | `requiresConfidentiality()` Does this plugin require the connection itself to be confidential (i.e. tls/ssl)...Highly recommended to return "true" for plugins that return the credentials in the clear.
    `void` | `setAuthenticationParameters(java.lang.String user, java.lang.String password)` This method called from cJ before first nextAuthenticationStep call.

    - ### Methods inherited from interface com.mysql.jdbc.Extension

      `destroy, init`

- - ### Method Detail

    - #### getProtocolPluginName

          java.lang.String getProtocolPluginName()

      Returns the name that the MySQL server uses on the wire for this plugin

    - #### requiresConfidentiality

          boolean requiresConfidentiality()

      Does this plugin require the connection itself to be confidential (i.e. tls/ssl)...Highly recommended to return "true" for plugins that return the credentials in the clear.

    - #### isReusable

          boolean isReusable()

      Returns:
        true if plugin instance may be reused, false otherwise

    - #### setAuthenticationParameters

          void setAuthenticationParameters(java.lang.String user,
                                         java.lang.String password)

      This method called from cJ before first nextAuthenticationStep call. Values of user and password parameters are passed from those in MysqlIO.changeUser(String userName, String password, String database) or MysqlIO.doHandshake(String user, String password, String database). Plugin should use these values instead of values from connection properties because parent method may be a changeUser call which saves user and password into connection only after successful handshake.
      Parameters:
        `user` -
        `password` -

    - #### nextAuthenticationStep

          boolean nextAuthenticationStep(Buffer fromServer,
                                       java.util.List<Buffer> toServer)
                                         throws java.sql.SQLException

      Process authentication handshake data from server and optionally produce data to be sent back to the server. The driver will keep calling this method until either a SQLException is thrown (authentication failure, please use appropriate SQLStates) or the method returns false or driver receives an OK packet from the server which indicates that the connection has been already approved. If, on return from this method, toServer is a non-empty list of buffers, then these buffers should be sent to the server in order and without any reads in between them. If toServer is an empty list, no data should be sent to server. If method returns true, it means that this plugin does not need any more data from the server to conclude the handshake and this method should not be called again. (Note that server can send an Auth Method Switch request and then another handshake will start, possibly using a different plugin.) If this method returns false, it means that plugin needs more data from the server to conclude the handshake. In that case next handshake data payload should be read from the server (after possibly writing data from toServer as explained above). Then this method should be called again with the new data in fromServer parameter. In case of errors the method should throw SQLException with appropriate SQLStates.
      Parameters:
        `fromServer` - a buffer containing handshake data payload from server (can be empty).
        `toServer` - list of buffers with data to be sent to the server (the list can be empty, but buffers in the list should contain data).
      Returns:
        False if more data should be read from the server and next call to this method made, true otherwise.
      Throws:
        `java.sql.SQLException`