我正在尝试向我的用户添加授权 throw google openid。我收到 id ( https://www.google.com/accounts/o8/id?id=AIt...Ew-Bo ) 但我如何检查它是否合法。我的意思是用户可以使用另一个用户的电子邮件创建恶意请求,我如何检查返回的电子邮件和声称的 ID 是否合法?
问问题
2549 次
4 回答
3
与其尝试自己实现发现和签名验证,不如使用已经为此目的创建的众多库之一。以下是各种编程语言的一堆:
于 2010-06-05T06:29:26.873 回答
1
public function verify_response()
{$params=$_REQUEST;
$query=array('openid.signed'=>$params['openid.signed'],
'openid.sig'=>$params['openid.sig'],
'openid.mode'=>'check_authentication'
);
$keys=explode(',', 'openid.'.strtr($params['openid.signed'], array(','=>',openid.')));
foreach ($params as $k=>$v)
{if (in_array($k, $keys))
{$query[$k]=$v;
}
}
$query=http_build_query($query);
$response=file_get_contents($params['openid.op_endpoint'].'?'.$query);
return stripos($response, 'is_valid:true')!==false;
}
于 2011-03-15T02:36:28.357 回答
0
Google 的 OpenID(Google Apps for Domains OpenID 除外)只是标准的 OpenID。您应该采取任何其他 OpenID 所需的所有预防措施来确保断言是合法的。你是对的......任何人都可以制作一个 OpenID 肯定断言来欺骗您的 RP,除非您的 RP 验证签名,对标识符执行发现并将该标识符的授权 OP 端点与签署响应的端点相匹配。
至于您是否可以信任电子邮件地址,这取决于您。您可以选择信任 Google OP 端点,然后您就知道了。
于 2010-06-03T03:09:24.683 回答
-1
function ValidateWithServer(){
$params = array(
'openid.assoc_handle' => urlencode($_REQUEST['openid_assoc_handle']),
'openid.signed' => urlencode($_REQUEST['openid_signed']),
'openid.sig' => urlencode($_REQUEST['openid_sig'])
);
// Send only required parameters to confirm validity
$arr_signed = explode(",",str_replace('sreg.','sreg_',$_REQUEST['openid_signed']));
for ($i=0; $i<count($arr_signed); $i++){
$s = str_replace('sreg_','sreg.', $arr_signed[$i]);
$c = $_REQUEST['openid_' . $arr_signed[$i]];
// if ($c != ""){
$params['openid.' . $s] = urlencode($c);
// }
}
$params['openid.mode'] = "check_authentication";
$openid_server = $this->GetOpenIDServer();
if ($openid_server == false){
return false;
}
$response = $this->CURL_Request($openid_server,'POST',$params);
$data = $this->splitResponse($response);
if ($data['is_valid'] == "true") {
return true;
}else{
return false;
}
}
于 2011-02-25T07:52:15.563 回答