linotp.tokens.remotetoken module

This file file contains the Remote token class

class linotp.tokens.remotetoken.RemoteTokenClass(aToken)[source]

Bases: linotp.tokens.base.TokenClass

The Remote token forwards an authentication request to another LinOTP server. The request can be forwarded to a user on the other server or to a serial number on the other server. The PIN can be checked on the local LinOTP server or on the remote server.

Using the Remote token you can assign one physical token to many different users.

authenticate(passw, user, options=None)[source]

do the authentication on base of password / otp and user and options, the request parameters.

Here we contact the other LinOTP server to validate the OtpVal.

  • passw – the password / otp
  • user – the requesting user
  • options – the additional request parameters

tupple of (success, otp_count - 0 or -1, reply)

checkPin(pin, options=None)[source]

check the pin - either remote or localy - in case of remote, we return true, as the

the splitPinPass will put the passw then in the otpVal
checkResponse4Challenge(user, passw, options=None, challenges=None)[source]

This method verifies if the given passw matches any existing challenge of the token.

It then returns the new otp_counter of the token and the list of the matching challenges.

In case of success the otp_counter needs to be >= 0. The matching_challenges is passed to the method challenge_janitor() to clean up challenges.

  • user (User object) – the requesting user
  • passw (string) – the password (pin+otp)
  • options (dict) – additional arguments from the request, which could be token specific
  • challenges (list) – A sorted list of valid challenges for this token.

tuple of (otpcounter and the list of matching challenges)

check_otp_exist(otp, window=None, user=None, autoassign=False)[source]

checks if the given OTP value is/are values of this very token. This is used to autoassign and to determine the serial number of a token.


lookup if pin should be checked locally or on remote host

createChallenge(transactionid, options=None)[source]

for every remote challenge we have to create a local challenge e.g. to support multiple challenges

remark: we might call the super of this method first

do_request(passw, transactionid=None, user=None, autoassign=False)[source]

run the http request against the remote host

  • passw – the password which should be checked on the remote host
  • transactionid – provided, if this is a challenge response
  • user – the requesting user - used if no remote serial or remote user is provided

Tuple of (success, otp_count= -1 or 0, reply=remote response)

classmethod getClassInfo(key=None, ret='all')[source]

getClassInfo - returns a subtree of the token definition

  • key (string) – subsection identifier
  • ret (user defined) – default return value, if nothing is found

subsection if key exists or user defined

Return type:


classmethod getClassPrefix()[source]

return the token type prefix

classmethod getClassType()[source]

return the class type identifier

is_challenge_request(passw, user, options=None)[source]

This method checks, if this is a request, that triggers a challenge. It depends on the way, the pin is checked - either locally or remote

  • passw (string) – password, which might be pin or pin+otp
  • user (User object) – The user from the authentication request
  • options (dict) – dictionary of additional request parameters

true or false


Split the PIN and the OTP value. Only if it is locally checked and not remotely.

Parameters:passw – the password with pin and otp
Returns:tupple of the (success, pin and otpvalue)

second phase of the init process - updates parameters

Parameters:param – the request parameters
  • nothing -