163 require_once
"Auth/OpenID.php";
164 require_once
"Auth/OpenID/Message.php";
165 require_once
"Auth/OpenID/HMAC.php";
166 require_once
"Auth/OpenID/Association.php";
167 require_once
"Auth/OpenID/CryptUtil.php";
168 require_once
"Auth/OpenID/DiffieHellman.php";
169 require_once
"Auth/OpenID/KVForm.php";
170 require_once
"Auth/OpenID/Nonce.php";
171 require_once
"Auth/OpenID/Discover.php";
172 require_once
"Auth/OpenID/URINorm.php";
173 require_once
"Auth/Yadis/Manager.php";
174 require_once
"Auth/Yadis/XRI.php";
180 define(
'Auth_OpenID_SUCCESS',
'success');
185 define(
'Auth_OpenID_CANCEL',
'cancel');
191 define(
'Auth_OpenID_FAILURE',
'failure');
199 define(
'Auth_OpenID_SETUP_NEEDED',
'setup needed');
206 define(
'Auth_OpenID_PARSE_ERROR',
'parse error');
262 $consumer_cls = null)
264 if ($session === null) {
268 $this->session = $session;
270 if ($consumer_cls !== null) {
271 $this->consumer =
new $consumer_cls($store);
288 $session_key_prefix);
313 function begin($user_url, $anonymous=
false)
315 $openid_url = $user_url;
319 $this->session_key_prefix);
325 $m = $disco->getManager();
330 $disco->destroyManager();
333 $disco->session->set($disco->session_key,
334 serialize($loader->toSession($m)));
338 $endpoint = $disco->getNextService($this->discoverMethod,
339 $this->consumer->fetcher);
342 $m = $disco->getManager();
345 $disco->session->set($disco->session_key,
346 serialize($loader->toSession($m)));
349 if ($endpoint === null) {
376 $auth_req = $this->consumer->begin($endpoint);
377 $this->session->set($this->_token_key,
378 $loader->toSession($auth_req->endpoint));
379 if (!$auth_req->setAnonymous($anonymous)) {
381 "OpenID 1 requests MUST include the identifier " .
412 if ($current_url && !is_string($current_url)) {
415 trigger_error(
"current_url must be a string; see NEWS file " .
416 "for upgrading notes.",
420 if ($query === null) {
425 $endpoint_data = $this->session->get($this->_token_key);
427 $loader->fromSession($endpoint_data);
430 $response = $this->consumer->complete($message, $endpoint,
432 $this->session->del($this->_token_key);
436 if ($response->identity_url !== null) {
438 $response->identity_url,
439 $this->session_key_prefix);
440 $disco->cleanup(
true);
454 var $session_type =
'DH-SHA1';
455 var $hash_func =
'Auth_OpenID_SHA1';
456 var $secret_size = 20;
457 var $allowed_assoc_types = array(
'HMAC-SHA1');
472 $cpub = $math->longToBase64($this->dh->public);
474 $args = array(
'dh_consumer_public' => $cpub);
476 if (!$this->dh->usingDefaultValues()) {
477 $args = array_merge($args, array(
479 $math->longToBase64($this->dh->mod),
481 $math->longToBase64($this->dh->gen)));
490 'dh_server_public')) {
502 'dh_server_public'));
506 return $this->dh->xorSecret($spub, $enc_mac_key, $this->hash_func);
517 var $session_type =
'DH-SHA256';
518 var $hash_func =
'Auth_OpenID_SHA256';
519 var $secret_size = 32;
520 var $allowed_assoc_types = array(
'HMAC-SHA256');
529 var $session_type =
'no-encryption';
530 var $allowed_assoc_types = array(
'HMAC-SHA1',
'HMAC-SHA256');
554 'no-encryption' =>
'Auth_OpenID_PlainTextConsumerSession',
555 'DH-SHA1' =>
'Auth_OpenID_DiffieHellmanSHA1ConsumerSession',
556 'DH-SHA256' =>
'Auth_OpenID_DiffieHellmanSHA256ConsumerSession');
587 var $openid1_nonce_query_arg_name =
'janrain_nonce';
594 var $openid1_return_to_identifier_name =
'openid1_claimed_id';
616 $this->store = $store;
618 $this->_use_assocs = (is_null($this->store) ? false :
true);
619 if (get_class($this->store) ==
"Auth_OpenID_DumbStore") {
620 $this->_use_assocs =
false;
636 $assoc = $this->_getAssociation($service_endpoint);
638 $r->return_to_args[$this->openid1_nonce_query_arg_name] =
641 if ($r->message->isOpenID1()) {
642 $r->return_to_args[$this->openid1_return_to_identifier_name] =
643 $r->endpoint->claimed_id;
661 $mode_methods = array(
662 'cancel' =>
'_complete_cancel',
663 'error' =>
'_complete_error',
664 'setup_needed' =>
'_complete_setup_needed',
665 'id_res' =>
'_complete_id_res',
671 return call_user_func_array(array($this, $method),
672 array($message, $endpoint, $return_to));
684 sprintf(
"Invalid openid.mode '%s'", $mode));
705 $contact, $reference);
713 if (!$message->isOpenID2()) {
714 return $this->_completeInvalid($message, $endpoint);
730 if ($this->_checkSetupNeeded($message)) {
732 $endpoint, $user_setup_url);
734 return $this->_doIdRes($message, $endpoint, $return_to);
746 if ($message->isOpenID1()) {
749 if ($user_setup_url !== null) {
764 $result = $this->_idResCheckForFields($message);
770 if (!$this->_checkReturnTo($message, $return_to)) {
772 sprintf(
"return_to does not match return URL. Expected %s, got %s",
778 $result = $this->_verifyDiscoveryResults($message, $endpoint);
786 $result = $this->_idResCheckSignature($message,
787 $endpoint->server_url);
793 $result = $this->_idResCheckNonce($message, $endpoint);
802 return $signed_list_str;
804 $signed_list = explode(
',', $signed_list_str);
825 $message->toPostArgs());
844 if ((!array_key_exists(
'port', $return_to_parts)) &&
845 (!array_key_exists(
'port', $msg_return_to_parts))) {
846 $return_to_parts[
'port'] = null;
847 $msg_return_to_parts[
'port'] = null;
852 if ((!array_key_exists(
'path', $return_to_parts)) &&
853 (!array_key_exists(
'path', $msg_return_to_parts))) {
854 $return_to_parts[
'path'] = null;
855 $msg_return_to_parts[
'path'] = null;
860 foreach (array(
'scheme',
'host',
'port',
'path') as $component) {
863 if (!array_key_exists($component, $return_to_parts)) {
867 if (!array_key_exists($component, $msg_return_to_parts)) {
897 "Response has no return_to");
900 $parsed_url = parse_url($return_to);
903 if (array_key_exists(
'query', $parsed_url)) {
904 $rt_query = $parsed_url[
'query'];
908 foreach ($q as $rt_key => $rt_value) {
909 if (!array_key_exists($rt_key, $query)) {
911 sprintf(
"return_to parameter %s absent from query", $rt_key));
913 $value = $query[$rt_key];
914 if ($rt_value != $value) {
916 sprintf(
"parameter %s value %s does not match " .
917 "return_to value %s", $rt_key,
926 foreach ($bare_args as $key => $value) {
929 sprintf(
"Parameter %s = %s not in return_to URL",
945 return $assoc_handle;
948 $assoc = $this->store->getAssociation($server_url, $assoc_handle);
951 if ($assoc->getExpiresIn() <= 0) {
959 'Association with ' . $server_url .
' expired');
962 if (!$assoc->checkMessageSignature($message)) {
966 $this->store->removeAssociation($server_url, $assoc_handle);
975 if (!$this->_checkAuth($message, $server_url)) {
977 "Server denied check_authentication");
990 return $this->_verifyDiscoveryResultsOpenID2($message,
993 return $this->_verifyDiscoveryResultsOpenID1($message,
1004 $this->openid1_return_to_identifier_name);
1006 if (($endpoint === null) && ($claimed_id === null)) {
1008 'When using OpenID 1, the claimed ID must be supplied, ' .
1009 'either by passing it through as a return_to parameter ' .
1010 'or by using a session, and supplied to the GenericConsumer ' .
1011 'as the argument to complete()');
1012 }
else if (($endpoint !== null) && ($claimed_id === null)) {
1013 $claimed_id = $endpoint->claimed_id;
1022 $to_match->claimed_id = $claimed_id;
1024 if ($to_match->local_id === null) {
1026 "Missing required field openid.identity");
1029 $to_match_1_0 = $to_match->copy();
1032 if ($endpoint !== null) {
1033 $result = $this->_verifyDiscoverySingle($endpoint, $to_match);
1035 if (is_a(
$result,
'Auth_OpenID_TypeURIMismatch')) {
1036 $result = $this->_verifyDiscoverySingle($endpoint,
1051 return $this->_discoverAndVerify($to_match->claimed_id,
1052 array($to_match, $to_match_1_0));
1062 foreach ($to_match->type_uris as $type_uri) {
1063 if (!$endpoint->usesExtension($type_uri)) {
1065 "Required type ".$type_uri.
" not present");
1072 list($defragged_claimed_id, $_) =
1075 if ($defragged_claimed_id != $endpoint->claimed_id) {
1077 sprintf(
'Claimed ID does not match (different subjects!), ' .
1078 'Expected %s, got %s', $defragged_claimed_id,
1079 $endpoint->claimed_id));
1082 if ($to_match->getLocalID() != $endpoint->getLocalID()) {
1084 sprintf(
'local_id mismatch. Expected %s, got %s',
1085 $to_match->getLocalID(), $endpoint->getLocalID()));
1093 if ($to_match->server_url === null) {
1096 "Preferred namespace mismatch (bug)");
1098 }
else if ($to_match->server_url != $endpoint->server_url) {
1100 sprintf(
'OP Endpoint mismatch. Expected %s, got %s',
1101 $to_match->server_url, $endpoint->server_url));
1123 if ($to_match->server_url === null) {
1125 "OP Endpoint URL missing");
1130 if (($to_match->claimed_id === null) &&
1131 ($to_match->local_id !== null)) {
1133 'openid.identity is present without openid.claimed_id');
1136 if (($to_match->claimed_id !== null) &&
1137 ($to_match->local_id === null)) {
1139 'openid.claimed_id is present without openid.identity');
1142 if ($to_match->claimed_id === null) {
1147 $to_match->server_url);
1156 return $this->_discoverAndVerify($to_match->claimed_id,
1163 $result = $this->_verifyDiscoverySingle($endpoint, $to_match);
1166 $endpoint = $this->_discoverAndVerify($to_match->claimed_id,
1176 if ($endpoint->claimed_id != $to_match->claimed_id) {
1177 $endpoint->claimed_id = $to_match->claimed_id;
1189 list($unused, $services) = call_user_func_array($this->discoverMethod,
1197 sprintf(
"No OpenID information found at %s",
1201 return $this->_verifyDiscoveryServices($claimed_id, $services,
1202 $to_match_endpoints);
1209 $services, $to_match_endpoints)
1214 foreach ($services as $endpoint) {
1215 foreach ($to_match_endpoints as $to_match_endpoint) {
1216 $result = $this->_verifyDiscoverySingle($endpoint,
1217 $to_match_endpoint);
1228 sprintf(
'No matching endpoint found after discovering %s: %s',
1229 $claimed_id,
$result->message));
1246 $this->openid1_nonce_query_arg_name);
1254 if ($message->isOpenID1()) {
1256 $nonce = $this->_idResGetNonceOpenID1($message, $endpoint);
1262 $server_url = $endpoint->server_url;
1265 if ($nonce === null) {
1267 "Nonce missing from response");
1272 if ($parts === null) {
1274 "Malformed nonce in response");
1277 list($timestamp, $salt) = $parts;
1279 if (!$this->store->useNonce($server_url, $timestamp, $salt)) {
1281 "Nonce already used or out of range");
1292 $basic_fields = array(
'return_to',
'assoc_handle',
'sig',
'signed');
1293 $basic_sig_fields = array(
'return_to',
'identity');
1295 $require_fields = array(
1297 array(
'op_endpoint')),
1303 $require_sigs = array(
1305 array(
'response_nonce',
1313 foreach ($require_fields[$message->getOpenIDNamespace()] as $field) {
1316 "Missing required field '".$field.
"'");
1324 return $signed_list_str;
1326 $signed_list = explode(
',', $signed_list_str);
1328 foreach ($require_sigs[$message->getOpenIDNamespace()] as $field) {
1331 (!in_array($field, $signed_list))) {
1333 "'".$field.
"' not signed");
1345 $request = $this->_createCheckAuthRequest($message);
1346 if ($request === null) {
1350 $resp_message = $this->_makeKVPost($request, $server_url);
1351 if (($resp_message === null) ||
1352 (is_a($resp_message,
'Auth_OpenID_ServerErrorContainer'))) {
1356 return $this->_processCheckAuthResponse($resp_message, $server_url);
1366 foreach (explode(
',', $signed) as $k) {
1367 $value = $message->getAliasedArg($k);
1368 if ($value === null) {
1373 $ca_message = $message->copy();
1375 'check_authentication');
1388 'invalidate_handle');
1390 if ($invalidate_handle !== null) {
1391 $this->store->removeAssociation($server_url,
1392 $invalidate_handle);
1395 if ($is_valid ==
'true') {
1414 if ($response->status == 400) {
1417 }
else if ($response->status != 200 and $response->status != 206) {
1421 return $response_message;
1429 $body = $message->toURLEncoded();
1430 $resp = $this->fetcher->post($server_url, $body);
1432 if ($resp === null) {
1436 return $this->_httpResponseToMessage($resp, $server_url);
1444 if (!$this->_use_assocs) {
1448 $assoc = $this->store->getAssociation($endpoint->server_url);
1450 if (($assoc === null) ||
1451 ($assoc->getExpiresIn() <= 0)) {
1453 $assoc = $this->_negotiateAssociation($endpoint);
1455 if ($assoc !== null) {
1456 $this->store->storeAssociation($endpoint->server_url,
1478 if (($server_error->error_code !=
'unsupported-type') ||
1479 ($server_error->message->isOpenID1())) {
1495 if (($assoc_type === null) || ($session_type === null)) {
1497 }
else if (!$this->negotiator->isAllowed($assoc_type,
1501 return array($assoc_type, $session_type);
1511 list($assoc_type, $session_type) = $this->negotiator->getAllowedType();
1513 $assoc = $this->_requestAssociation(
1514 $endpoint, $assoc_type, $session_type);
1520 if (is_a($assoc,
'Auth_OpenID_ServerErrorContainer')) {
1523 $supportedTypes = $this->_extractSupportedAssociationType(
1524 $why, $endpoint, $assoc_type);
1526 if ($supportedTypes !== null) {
1527 list($assoc_type, $session_type) = $supportedTypes;
1532 $assoc = $this->_requestAssociation(
1533 $endpoint, $assoc_type, $session_type);
1535 if (is_a($assoc,
'Auth_OpenID_ServerErrorContainer')) {
1559 list($assoc_session, $args) = $this->_createAssociateRequest(
1560 $endpoint, $assoc_type, $session_type);
1562 $response_message = $this->_makeKVPost($args, $endpoint->server_url);
1564 if ($response_message === null) {
1567 }
else if (is_a($response_message,
1568 'Auth_OpenID_ServerErrorContainer')) {
1569 return $response_message;
1572 return $this->_extractAssociation($response_message, $assoc_session);
1582 $assoc_type = $assoc_response->getArg(
1590 $assoc_handle = $assoc_response->getArg(
1595 return $assoc_handle;
1602 $expires_in_str = $assoc_response->getArg(
1607 return $expires_in_str;
1611 if ($expires_in ===
false) {
1613 $err = sprintf(
"Could not parse expires_in from association ".
1614 "response %s", print_r($assoc_response,
true));
1619 if ($assoc_response->isOpenID1()) {
1620 $session_type = $this->_getOpenID1SessionType($assoc_response);
1622 $session_type = $assoc_response->getArg(
1627 return $session_type;
1632 if ($assoc_session->session_type != $session_type) {
1633 if ($assoc_response->isOpenID1() &&
1634 ($session_type ==
'no-encryption')) {
1650 if (!in_array($assoc_type, $assoc_session->allowed_assoc_types)) {
1657 $secret = $assoc_session->extractSecret($assoc_response);
1659 if ($secret === null) {
1664 $expires_in, $assoc_handle, $secret, $assoc_type);
1672 if (array_key_exists($session_type, $this->session_types)) {
1673 $session_type_class = $this->session_types[$session_type];
1675 if (is_callable($session_type_class)) {
1676 $assoc_session = $session_type_class();
1678 $assoc_session =
new $session_type_class();
1685 'mode' =>
'associate',
1686 'assoc_type' => $assoc_type);
1688 if (!$endpoint->compatibilityMode()) {
1694 if ((!$endpoint->compatibilityMode()) ||
1695 ($assoc_session->session_type !=
'no-encryption')) {
1696 $args[
'session_type'] = $assoc_session->session_type;
1699 $args = array_merge($args, $assoc_session->getRequest());
1701 return array($assoc_session, $message);
1729 if ($session_type ==
'no-encryption') {
1732 }
else if (($session_type ==
'') || ($session_type === null)) {
1737 $session_type =
'no-encryption';
1740 return $session_type;
1762 $this->assoc = $assoc;
1763 $this->endpoint = $endpoint;
1764 $this->return_to_args = array();
1766 $endpoint->preferredNamespace());
1767 $this->_anonymous =
false;
1778 $extension_request->toMessage($this->message);
1802 return $this->message->setArg($namespace, $key, $value);
1816 if ($is_anonymous && $this->message->isOpenID1()) {
1819 $this->_anonymous = $is_anonymous;
1848 $this->return_to_args);
1849 }
else if ($immediate) {
1854 "'return_to' is mandatory when using checkid_immediate");
1855 }
else if ($this->message->isOpenID1()) {
1859 "'return_to' is mandatory for OpenID 1 requests");
1860 }
else if ($this->return_to_args) {
1864 "extra 'return_to' arguments where specified, " .
1865 "but no return_to was specified");
1869 $mode =
'checkid_immediate';
1871 $mode =
'checkid_setup';
1874 $message = $this->message->copy();
1875 if ($message->isOpenID1()) {
1876 $realm_key =
'trust_root';
1878 $realm_key =
'realm';
1883 $realm_key => $realm,
1885 'return_to' => $return_to));
1887 if (!$this->_anonymous) {
1888 if ($this->endpoint->isOPIdentifier()) {
1892 $claimed_id = $request_identity =
1895 $request_identity = $this->endpoint->getLocalID();
1896 $claimed_id = $this->endpoint->claimed_id;
1903 if ($message->isOpenID2()) {
1911 $this->assoc->handle);
1920 $message = $this->getMessage($realm, $return_to, $immediate);
1926 return $message->toURL($this->endpoint->server_url);
1938 $form_tag_attrs=null)
1940 $message = $this->getMessage($realm, $return_to, $immediate);
1946 return $message->toFormMarkup($this->endpoint->server_url,
1957 $form_tag_attrs=null)
1959 $form = $this->formMarkup($realm, $return_to, $immediate,
1970 return $this->endpoint->compatibilityMode();
1984 $this->endpoint = $endpoint;
1985 if ($endpoint === null) {
1986 $this->identity_url = null;
1988 $this->identity_url = $endpoint->claimed_id;
2011 if ($this->endpoint !== null) {
2012 return $this->endpoint->getDisplayIdentifier();
2041 $this->endpoint = $endpoint;
2042 $this->identity_url = $endpoint->claimed_id;
2043 $this->signed_args = $signed_args;
2044 $this->message = $message;
2046 if ($this->signed_args === null) {
2047 $this->signed_args = array();
2059 if ($require_signed) {
2060 return $this->getSignedNS($namespace_uri);
2062 return $this->message->getArgs($namespace_uri);
2068 return $this->message->isOpenID1();
2075 return in_array($this->message->getKey($ns_uri, $ns_key),
2076 $this->signed_args);
2083 if ($this->isSigned($ns_uri, $ns_key)) {
2084 return $this->message->getArg($ns_uri, $ns_key, $default);
2094 $msg_args = $this->message->getArgs($ns_uri);
2099 foreach ($msg_args as $key => $value) {
2100 if (!$this->isSigned($ns_uri, $key)) {
2101 unset($msg_args[$key]);
2143 $contact = null, $reference = null)
2145 $this->setEndpoint($endpoint);
2146 $this->message = $message;
2147 $this->contact = $contact;
2148 $this->reference = $reference;
2171 $this->error_text = $error_text;
2172 $this->error_code = $error_code;
2173 $this->message = $message;
2181 $error_text = $message->getArg(
2207 $this->setEndpoint($endpoint);
2234 $this->setEndpoint($endpoint);
2235 $this->setup_url = $setup_url;
const Auth_OpenID_FAILURE
static getHTTPFetcher($timeout=20)
_checkReturnTo($message, $return_to)
const Auth_OpenID_TYPE_1_1
Auth_OpenID_DiffieHellmanSHA1ConsumerSession($dh=null)
_complete_setup_needed($message, $endpoint, $unused)
const Auth_OpenID_SUCCESS
const Auth_OpenID_TYPE_1_0
isSigned($ns_uri, $ns_key)
extensionResponse($namespace_uri, $require_signed)
static _httpResponseToMessage($response, $server_url)
_idResGetNonceOpenID1($message, $endpoint)
Auth_OpenID_getDefaultNegotiator()
_getOpenID1SessionType($assoc_response)
if(!defined('ADODB_ERROR_HANDLER_TYPE')) define('ADODB_ERROR_HANDLER_TYPE' E_USER_ERROR
Auth_OpenID_splitNonce($nonce_string)
htmlMarkup($realm, $return_to=null, $immediate=false, $form_tag_attrs=null)
addExtensionArg($namespace, $key, $value)
Auth_OpenID_CancelResponse($endpoint)
_checkSetupNeeded($message)
_negotiateAssociation($endpoint)
_verifyDiscoveryResults($message, $endpoint=null)
const Auth_OpenID_TYPE_2_0
static arrayGet($arr, $key, $fallback=null)
formMarkup($realm, $return_to=null, $immediate=false, $form_tag_attrs=null)
_processCheckAuthResponse($response, $server_url)
Auth_OpenID_urinorm($uri)
static fromKVForm($kvform_string)
complete($current_url, $query=null)
_idResCheckSignature($message, $server_url)
Auth_OpenID_GenericConsumer($store)
beginWithoutDiscovery($endpoint, $anonymous=false)
getMessage($realm, $return_to=null, $immediate=false)
_verifyDiscoveryResultsOpenID1($message, $endpoint)
redirectURL($realm, $return_to=null, $immediate=false)
Auth_OpenID_ServerErrorContainer($error_text, $error_code, $message)
_completeInvalid($message, $endpoint, $unused)
_extractAssociation($assoc_response, $assoc_session)
_verifyDiscoveryResultsOpenID2($message, $endpoint)
getSigned($ns_uri, $ns_key, $default=null)
begin($user_url, $anonymous=false)
Auth_OpenID_Consumer($store, $session=null, $consumer_cls=null)
_verifyDiscoveryServices($claimed_id, $services, $to_match_endpoints)
_getAssociation($endpoint)
Auth_OpenID_SetupNeededResponse($endpoint, $setup_url=null)
Auth_OpenID_AuthRequest($endpoint, $assoc)
_verifyDiscoverySingle($endpoint, $to_match)
_complete_id_res($message, $endpoint, $return_to)
const Auth_OpenID_NO_DEFAULT
if($list_of_literals) if(!empty($literals)) if(!empty($literals)) $result
Analyse literals to prepend the N char to them if their contents aren't numeric.
addExtension($extension_request)
const Auth_OpenID_IDENTIFIER_SELECT
static appendArgs($url, $args)
static fromOPEndpointURL($op_endpoint_url)
const Auth_OpenID_BARE_NS
_createAssociateRequest($endpoint, $assoc_type, $session_type)
_makeKVPost($message, $server_url)
static addPrefix($values, $prefix)
setAnonymous($is_anonymous)
_complete_error($message, $endpoint, $unused)
static fromOpenIDArgs($openid_args)
const Auth_OpenID_OPENID1_NS
Auth_OpenID_FailureResponse($endpoint, $message=null, $contact=null, $reference=null)
const Auth_OpenID_OPENID_NS
getDiscoveryObject($session, $openid_url, $session_key_prefix)
const Auth_OpenID_OPENID2_NS
_idResCheckForFields($message)
const Auth_OpenID_SETUP_NEEDED
static fromExpiresIn($expires_in, $handle, $secret, $assoc_type)
static fromPostArgs($args)
_complete_cancel($message, $endpoint, $unused)
_idResCheckNonce($message, $endpoint)
_checkAuth($message, $server_url)
_requestAssociation($endpoint, $assoc_type, $session_type)
Auth_OpenID_mkNonce($when=null)
static autoSubmitHTML($form, $title="OpenId transaction in progress")
_createCheckAuthRequest($message)
Auth_OpenID_getAvailableSessionTypes()
static fromMessage($message)
_doIdRes($message, $endpoint, $return_to)
complete($message, $endpoint, $return_to)
static getQuery($query_str=null)
_discoverAndVerify($claimed_id, $to_match_endpoints)
_extractSupportedAssociationType($server_error, $endpoint, $assoc_type)
_verifyReturnToArgs($query)
Auth_OpenID_SuccessResponse($endpoint, $message, $signed_args=null)