这个就不用说太多了,是标准的!
if(empty($_REQUEST['openid_mode'])){ if(empty($_REQUEST['OpenID'])) LocationHtml($LoginUrl, 'OpenID is null!'); $openid_url = formUrl($_REQUEST['OpenID']); $openid_server_list = getOpenIDServer($openid_url); if(empty($openid_server_list)) LocationHtml($LoginUrl, 'OpenID server is null!'); if(!empty($openid_server_list[1])) $openid_server = $openid_server_list[1]; if(!empty($openid_server_list[2])) $openid_server = $openid_server_list[2]; $data['openid.ns'] = 'http://specs.openid.net/auth/2.0'; $data['openid.mode'] = 'associate'; $data['openid.assoc_type'] = 'HMAC-SHA1'; $data['openid.session_type'] = 'no-encryption'; $AssocHandle = getAssociationHandle($openid_server.'?'.http_build_query($data)); setcookie('cookieAssocHandle', $AssocHandle); unset($data); $data['openid.assoc_handle'] = $AssocHandle; $data['openid.ax.mode'] = 'fetch_request'; $data['openid.ax.required'] = 'attr1,attr2,attr3,attr4,attr5'; $data['openid.ax.type.attr1'] = 'http://axschema.org/contact/email'; $data['openid.ax.type.attr2'] = 'http://axschema.org/namePerson/first'; $data['openid.ax.type.attr3'] = 'http://axschema.org/namePerson/last'; $data['openid.ax.type.attr4'] = 'http://axschema.org/contact/country/home'; $data['openid.ax.type.attr5'] = 'http://axschema.org/pref/language'; $data['openid.claimed_id'] = $openid_url; $data['openid.identity'] = $openid_url; $data['openid.mode'] = 'checkid_setup'; $data['openid.ns'] = 'http://specs.openid.net/auth/2.0'; $data['openid.ns.ax'] = 'http://openid.net/srv/ax/1.0'; $data['openid.ns.sreg'] = 'http://openid.net/extensions/sreg/1.1'; $data['openid.realm'] = $RealmUrl; $data['openid.return_to'] = $AuthUrl; $data['openid.sreg.optional'] = 'nickname,email,fullname,dob,gender,postcode,country,language,timezone'; $data['openid.sreg.policy_url'] = $PolicyUrl; $data['openid.sreg.required'] = 'email'; $data['openid.trust_root'] = $RealmUrl; $LocationUrl = $openid_server.'?'.http_build_query($data); }else{ if('id_res' == $_REQUEST['openid_mode'] && $AssocHandle == $_REQUEST['openid_assoc_handle']){ $openid = !empty($_REQUEST['openid_claimed_id']) ? formUrl($_REQUEST['openid_claimed_id']) : formUrl($_REQUEST['openid_identity']); $email = $_REQUEST['openid_sreg_email']; $fullname = $_REQUEST['openid_sreg_fullname']; $nickname = $_REQUEST['openid_sreg_nickname']; $timezone = $_REQUEST['openid_sreg_timezone']; echo('<pre>'); echo("<a href=$LoginUrl>BACK</a>\n\n"); print_r($_REQUEST); echo('</pre>'); } } break;
部分函数请参考:
Yahoo的OpenID登陆
Windows Live ID当作OpenID使用的方法
Google的OpenID的登陆
0 Comments