Handles the authentication response from the OP.
        :type context: satosa.context.Context
        :type args: Any
        :rtype: satosa.response.Response

        :param context: SATOSA context
        :param args: None
        :return:

def response_endpoint(self, context, *args):
        """
        Handles the authentication response from the OP.
        :type context: satosa.context.Context
        :type args: Any
        :rtype: satosa.response.Response

        :param context: SATOSA context
        :param args: None
        :return:
        """
        backend_state = context.state[self.name]
        authn_resp = self.client.parse_response(AuthorizationResponse, info=context.request, sformat="dict")
        if backend_state[STATE_KEY] != authn_resp["state"]:
            satosa_logging(logger, logging.DEBUG,
                           "Missing or invalid state in authn response for state: %s" %
                           backend_state,
                           context.state)
            raise SATOSAAuthenticationError(context.state, "Missing or invalid state in authn response")

        self._check_error_response(authn_resp, context)
        access_token, id_token_claims = self._get_tokens(authn_resp, context)
        if id_token_claims:
            self._verify_nonce(id_token_claims["nonce"], context)
        else:
            id_token_claims = {}

        userinfo = {}
        if access_token:
            # make userinfo request
            userinfo = self._get_userinfo(authn_resp["state"], context)

        if not id_token_claims and not userinfo:
            satosa_logging(logger, logging.ERROR, "No id_token or userinfo, nothing to do..", context.state)
            raise SATOSAAuthenticationError(context.state, "No user info available.")

        all_user_claims = dict(list(userinfo.items()) + list(id_token_claims.items()))
        satosa_logging(logger, logging.DEBUG, "UserInfo: %s" % all_user_claims, context.state)
        del context.state[self.name]
        internal_resp = self._translate_response(all_user_claims, self.client.authorization_endpoint)
        return self.auth_callback_func(context, internal_resp)