def authenticate_passive(self, request, principal, sso=[], sign=True, skip_handling_check=False, *args, **kwargs):
    "Generate a WLS 'success' response based on a pre-existing identity\n\n        This function creates a WLS response specifying that the principal was\n        authenticated based on previous successful authentication (e.g. an\n        existing WLS session cookie).\n\n        Args:\n            request (AuthRequest): the original WAA request\n            principal (AuthPrincipal): the principal authenticated by the WLS\n            sso (list): a list of strings indicating the authentication methods\n                previously used for authentication by the principal.  If an\n                empty list is passed, `principal.auth_methods` will be used.\n            sign (bool): whether to sign the response or not.  Recommended to\n                leave this at the default value of `True` (see warning below).\n\n            *args: passed to `AuthResponse.respond_to_request`\n            **kwargs: passed to `AuthResponse.respond_to_request`\n\n        Returns:\n            An `AuthResponse` instance matching the given arguments.\n\n        Warning:\n            Responses indicating successful authentication *MUST* be signed by\n            the WLS.  It is recommended that you leave `sign` set to `True`, or\n            make sure to sign the response manually afterwards.\n        "
    self._pre_response(request, skip_handling_check)
    if (request.iact == True):
        raise ValueError("WAA demanded active authentication (iact == 'yes')")
    if (len(sso) == 0):
        sso = principal.auth_methods
    if (len(sso) == 0):
        raise ValueError('no authentication methods specified for `sso`')
    if (principal.session_expiry is not None):
        life = int((principal.session_expiry - datetime.datetime.utcnow()).total_seconds())
    else:
        life = None
    response = AuthResponse.respond_to_request(*args, request=request, code=status.SUCCESS, principal=principal.userid, sso=sso, ptags=principal.ptags, life=life, **kwargs)
    return self._finish_response(response=response, sign=sign)
Generate a WLS 'success' response based on a pre-existing identity

This function creates a WLS response specifying that the principal was
authenticated based on previous successful authentication (e.g. an
existing WLS session cookie).

Args:
    request (AuthRequest): the original WAA request
    principal (AuthPrincipal): the principal authenticated by the WLS
    sso (list): a list of strings indicating the authentication methods
        previously used for authentication by the principal.  If an
        empty list is passed, `principal.auth_methods` will be used.
    sign (bool): whether to sign the response or not.  Recommended to
        leave this at the default value of `True` (see warning below).

    *args: passed to `AuthResponse.respond_to_request`
    **kwargs: passed to `AuthResponse.respond_to_request`

Returns:
    An `AuthResponse` instance matching the given arguments.

Warning:
    Responses indicating successful authentication *MUST* be signed by
    the WLS.  It is recommended that you leave `sign` set to `True`, or
    make sure to sign the response manually afterwards.
def authenticate_passive(self, request, principal, sso=[], sign=True, skip_handling_check=False, *args, **kwargs):
    "Generate a WLS 'success' response based on a pre-existing identity\n\n        This function creates a WLS response specifying that the principal was\n        authenticated based on previous successful authentication (e.g. an\n        existing WLS session cookie).\n\n        Args:\n            request (AuthRequest): the original WAA request\n            principal (AuthPrincipal): the principal authenticated by the WLS\n            sso (list): a list of strings indicating the authentication methods\n                previously used for authentication by the principal.  If an\n                empty list is passed, `principal.auth_methods` will be used.\n            sign (bool): whether to sign the response or not.  Recommended to\n                leave this at the default value of `True` (see warning below).\n\n            *args: passed to `AuthResponse.respond_to_request`\n            **kwargs: passed to `AuthResponse.respond_to_request`\n\n        Returns:\n            An `AuthResponse` instance matching the given arguments.\n\n        Warning:\n            Responses indicating successful authentication *MUST* be signed by\n            the WLS.  It is recommended that you leave `sign` set to `True`, or\n            make sure to sign the response manually afterwards.\n        "
    self._pre_response(request, skip_handling_check)
    if (request.iact == True):
        raise ValueError("WAA demanded active authentication (iact == 'yes')")
    if (len(sso) == 0):
        sso = principal.auth_methods
    if (len(sso) == 0):
        raise ValueError('no authentication methods specified for `sso`')
    if (principal.session_expiry is not None):
        life = int((principal.session_expiry - datetime.datetime.utcnow()).total_seconds())
    else:
        life = None
    response = AuthResponse.respond_to_request(*args, request=request, code=status.SUCCESS, principal=principal.userid, sso=sso, ptags=principal.ptags, life=life, **kwargs)
    return self._finish_response(response=response, sign=sign)