Following is an explanation of the order of events that occur during authentication.
- A remote application initiates a synchronization request using a remote ID, a MobiLink user name, and optionally a password
and new password. The MobiLink server starts a new transaction and triggers the begin_connection_autocommit event and begin_connection
event.
- MobiLink verifies that the remote ID is not currently synchronizing and presets the authentication_status to be 4000.
- If you have defined an authenticate_user script, then the following occurs:
- If the authenticate_user script is written in SQL, then this script is called with the preset authentication_status of 4000,
the MobiLink user name you provided, and optionally the password and new password.
If the authenticate_user script is written in Java or .NET and returns a SQL statement, then this SQL statement is called
with the preset authentication_status of 4000, the MobiLink user name you provided, and optionally the password and new password.
- If the authenticate_user script throws an exception or an error occurs in executing the script, the synchronization process
stops.
The authenticate_user script or the returned SQL statement must be a call to a stored procedure taking two to four arguments.
The preset authentication_status value is passed as the first parameter and may be updated by the stored procedure. The returned
value of the first parameter is the authentication_status from the authenticate_user script.
- If an authenticate_user_hashed script exists, then the following occurs:
- If a password was provided, a hashed value is calculated for it. If a new password was provided, a hashed value is calculated
for it.
- The authenticate_user_hashed script is called with the current value of authentication_status (either the preset authentication_status
if the authenticate_user script doesn't exist, or the authentication_status returned from the authenticate_user script) and
the hashed passwords. The behavior is identical to step 3. The returned value of the first parameter is used as the authentication_status
of the authenticate_user_hashed script.
- The MobiLink server takes the greater value of the auth_user status returned from the authenticate_user script and authenticate_user_hashed
script, if they exist, or the preset authentication_status if neither of the scripts exist.
- The MobiLink server queries the ml_user table for the MobiLink user name you provided.
- If either of the custom scripts authenticate_user or authenticate_user_hashed was called but the MobiLink user name you provided
is not in the ml_user table and the authentication_status is valid (1000 or 2000), the MobiLink user name is added to the
MobiLink system table ml_user. If authentication_status is not valid, ml_user is not updated and an error occurs.
- If the custom scripts were not called and the MobiLink user name you provided is not in the ml_user table, the MobiLink user
name you provided is added to ml_user if you started the MobiLink server with the -zu+ option. Otherwise, an error occurs
and authentication_status is set to be invalid.
- If the custom scripts were called and the MobiLink user name you provided is in the ml_user table, nothing happens.
- If the custom scripts were not called and the MobiLink user name you provided is in the ml_user table, the password is checked against the value in the
ml_user table. If the password matches the one in the ml_user table for the MobiLink user, the authentication_status is set
to be valid. Otherwise the authentication_status is set to be invalid.
- If that authentication_status is valid and neither of the scripts authenticate_user or authenticate_user_hashed was called
and you provided a new password in the ml_user table for this MobiLink user, the password is changed to the one you provided.
- If you have defined an authenticate_parameters script and the authentication_status is valid (1000 or 2000), then the following
occurs:
- The parameters are passed to the authenticate_parameters script.
- If the authenticate_parameters script returns an authentication_status value greater than the current authentication_status,
the new authentication_status overwrites the old value.
- If authentication_status is not valid, the synchronization is aborted.
- If you have defined the modify_user script, it is called to replace the MobiLink user name you provided with a new MobiLink
user name returned by this script.
- The MobiLink server always commits the transaction after MobiLink user authentication, regardless of the authentication_status.
If the authentication_status is valid (1000 or 2000), synchronization continues. If the authentication_status is invalid,
the synchronization is aborted.