After the TLS session is established and the the config-auth XML structure of type 'init'
is sent, the server requests the username and password using forms the client software
prompts the user to fill in. The server's reply utilizes a config-auth XML structure of type
'auth-request'.¶
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE auth SYSTEM "config-auth.dtd">
<config-auth client="vpn" type="auth-request">
<auth id="main">
<message>Please enter your username</message>
<form action="/auth" method="post">
<input label="Username:" name="username" type="text" />
</form>
</auth>
</config-auth>
¶
The client can be asked to provide the information in multiple, separate forms as
the above message implies, and any number of passwords may be requested, e.g., when second factor authentication
is available, a password and a second factor token may be requested. Alternatively, when the
number of inputs are fixed the client may be provided a combined form as listed below.¶
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE auth SYSTEM "config-auth.dtd">
<config-auth client="vpn" type="auth-request">
<auth id="main">
<message>Please enter your username</message>
<form action="/auth" method="post">
<input label="Username:" name="username" type="text"/>
<input label="Password:" name="password" type="password"/>
</form>
</auth>
</config-auth>
¶
The client software is expected to respond to the provided form(s) and send
the responses to the server using an HTTP POST on the form action location as
specified in the XML message (in the above examples it was "/auth").
The reply would then be of type 'auth-reply' as in the following example.¶
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE config-auth SYSTEM "config-auth.dtd">
<config-auth client="vpn" type="auth-reply">
<version who="vpn">v5.01</version>
<auth><username>test</username>
</auth>
</config-auth>
¶
As mentioned above, the server may ask repeatedly for information until
the user is authenticated. For example, the server could present
a second form asking for the password after the username is provided, or
ask for a second password if that is necessary, and may even use forms to
prompt the user to change a password, provide additional information and so on.
When multiple forms are provided the servers responds with an HTTP 200 OK status
code and sends its new request.¶
If client authentication fails, the server MUST respond with an HTTP 401
unauthorized status code. On successful authentication
the server replies with a 200 HTTP code and use the 'complete' config-auth
XML structure as follows.¶
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE config-auth SYSTEM "config-auth.dtd">
<config-auth client="vpn" type="complete">
<version who="sg">0.1(1)</version>
<auth id="success">
<title>SSL VPN Service</title>
</auth>
</config-auth>
¶
Note, that including the username and password in XML messages will
reveal the length of them to a passive eavesdropper. For that is is
RECOMMENDED for clients to use an 'X-Pad' HTTP header, containing
arbitrary printable data to make the message length a multiple of 64 bytes.¶