public AuthenticationResponse authenticate(AuthenticationRequest request) throws IOException {
switch(request.getVersion()) {
case v10:
default:
return this.authenticate(request, new Authentication10ResponseHandler());
case v11:
return this.authenticate(request, new AuthenticationJson11ResponseHandler());
case v20:
return this.authenticate(request, new AuthenticationJson20ResponseHandler());
}