104 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # Authentication Modules in MaxScale
 | |
| 
 | |
| This document describes the modular authentication in MaxScale. It contains
 | |
| protocol specific information on authentication and how it is handled in
 | |
| MaxScale.
 | |
| 
 | |
| The constants described in this document are defined in the authenticator.h
 | |
| header unless otherwise mentioned.
 | |
| 
 | |
| Authenticator modules compatible with MySQL protocol in MaxScale are
 | |
| [MySQL](MySQL-Authenticator.md), [GSSAPI](GSSAPI-Authenticator.md) and
 | |
| [PAM](PAM-Authenticator.md).
 | |
| 
 | |
| ## Authenticator initialization
 | |
| 
 | |
| When the authentication module is first loaded, the `initialize` entry point is
 | |
| called. The return value of this function will be passed as the first argument
 | |
| to the other entry points.
 | |
| 
 | |
| The `loadUsers` entry point of the client side authenticator is called when a
 | |
| service starts. The authenticator can load external user data when this entry
 | |
| point is called. This entry point is also called when user authentication has
 | |
| failed and the external user data needs to be refreshed.
 | |
| 
 | |
| When a connection is created, the `create` entry point is called to create per
 | |
| connection data. The return value of this function is stored in the
 | |
| `dcb->authenticator_data` field of the DCB object. This data is freed in the
 | |
| `destroy` entry point and the value returned by `create` will be given as the
 | |
| first parameter.
 | |
| 
 | |
| # MySQL Authentication Modules
 | |
| 
 | |
| The MySQL protocol authentication starts when the server sends the handshake
 | |
| packet to the client to which the client responds with a handshake response
 | |
| packet. If the server is using the default *mysql_native_password*
 | |
| authentication plugin, the server responds with either an OK packet or an ERR
 | |
| packet and the authentication is complete.
 | |
| 
 | |
| If a different authentication plugin is required to complete the authentication,
 | |
| instead of sending an OK or ERR packet, the server responds with an
 | |
| AuthSwitchRequest packet. This is where the pluggable authentication in MaxScale
 | |
| starts.
 | |
| 
 | |
| ## Client authentication in MaxScale
 | |
| 
 | |
| The first packet the client side authenticator plugins will receive is the
 | |
| client's handshake response packet.
 | |
| 
 | |
| The client protocol module will call the `extract` entry point of the
 | |
| authenticator where the authenticator should extract client information. If the
 | |
| `extract` entry point returns MXS_AUTH_SUCCEEDED, the `authenticate` entry point
 | |
| will be called.
 | |
| 
 | |
| The `authenticate` entry point is where the authenticator plugin should
 | |
| authenticate the client. If authentication is successful, the `authenticate`
 | |
| entry point should return MXS_AUTH_SUCCEEDED. If authentication is not yet
 | |
| complete or if the authentication module should be changed, the `authenticate`
 | |
| entry point should return MXS_AUTH_INCOMPLETE.
 | |
| 
 | |
| Authenticator plugins which do not use the default *mysql_native_password*
 | |
| authentication plugin should send an AuthSwitchRequest packet to the client and
 | |
| return MXS_AUTH_INCOMPLETE. When more data is available, the `extract` and
 | |
| `authenticate` entry points will be called again.
 | |
| 
 | |
| If either of the aforementioned entry points returns one of the following
 | |
| constants, the authentication is considered to have failed and the session will
 | |
| be closed.
 | |
| 
 | |
| - MXS_AUTH_FAILED
 | |
| - MXS_AUTH_FAILED_DB
 | |
| - MXS_AUTH_FAILED_SSL
 | |
| 
 | |
| Read the individual authenticator module documentation for more details on the
 | |
| authentication process of each authentication plugin.
 | |
| 
 | |
| ## Backend authentication in MaxScale
 | |
| 
 | |
| The first packet the authentication plugins in MaxScale will receive is either
 | |
| the AuthSwitchRequest packet or, in case of _mysql_native_password_, the OK
 | |
| packet. At this point, the protocol plugin will call the `extract` entry point
 | |
| of the backend authenticator. If the return value of the call is one of the
 | |
| following constants, the protocol plugin will call the `authenticate` entry
 | |
| point of the authenticator.
 | |
| 
 | |
| - MXS_AUTH_SUCCEEDED
 | |
| - MXS_AUTH_INCOMPLETE
 | |
| 
 | |
| If the `authenticate` entry point returns MXS_AUTH_SUCCEEDED, then
 | |
| authentication is complete and any queued queries from the clients will be sent
 | |
| to the backend server. If the return value is MXS_AUTH_INCOMPLETE or
 | |
| MXS_AUTH_SSL_INCOMPLETE, the protocol module will continue the authentication by
 | |
| calling the `extract` entry point once more data is available.
 | |
| 
 | |
| If either of the aforementioned entry points returns one of the following
 | |
| constants, the authentication is considered to have failed and the session will
 | |
| be closed.
 | |
| 
 | |
| - MXS_AUTH_FAILED
 | |
| - MXS_AUTH_FAILED_DB
 | |
| - MXS_AUTH_FAILED_SSL
 | |
| 
 | |
| Read the individual authenticator module documentation for more details on the
 | |
| authentication process of each authentication plugin.
 | 
