我想添加授权将谷歌openid添加到我的用户。我收到了ID(https://www.google.com/accounts/o8/id?id=AIt...Ew-Bo),但是如何检查它是否合法。我的意思是用户可以用其他用户的电子邮件创建恶意请求,我如何检查返回的电子邮件和声称的ID是否合法?如何验证谷歌openid响应
2
A
回答
0
Google的OpenID(Google Apps for Domains OpenID除外)只是标准的OpenID。您应该采取其他任何OpenID所需的所有预防措施,以确保断言是合法的。你是对的......任何人都可以编写一个OpenID肯定的断言来欺骗你的RP,除非你的RP验证了签名,在标识符上执行发现并将该标识符的授权OP端点与签名响应的标识符进行匹配。
至于你是否可以信任电子邮件地址,这取决于你。您可以选择信任Google OP终端,然后您知道。
2
与其试图自己实现发现和签名验证,您确实应该使用为此目的而创建的许多库中的一个。这里有一堆各种编程语言:
-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;
}
}
+0
您不应该依赖$ _GET,因为响应数据可能在$ _POST中。 – AlBeebe 2011-03-14 13:49:48
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;
}
相关问题
- 1. 验证Google OpenID响应
- 2. Django与谷歌的openid身份验证
- 3. 谷歌验证码验证
- 4. 谷歌ClientLogin验证
- 5. OpenID身份验证与谷歌失败随机
- 6. 无效的验证密钥响应从谷歌
- 7. 如何验证SAML响应
- 8. 如何验证RestTemplate响应?
- 9. 如何验证谷歌的地方AutoCompleteTextView
- 10. 如何验证谷歌视频代码?
- 11. 响应谷歌图
- 12. 谷歌OpenID和谷歌的API
- 13. 谷歌应用程序身份验证
- 14. 谷歌App Engine的Facebook应用验证
- 15. 的Facebook的OpenID VS谷歌的OpenID
- 16. 谷歌的reCAPTCHA验证
- 17. 验证码与谷歌AppEngine
- 18. 验证码与谷歌
- 19. 谷歌的OAuth2验证挂
- 20. asp.net谷歌验证码
- 21. 身份验证firebase谷歌
- 22. OpenID AX,谷歌和mod_rewrite
- 23. 从谷歌失去了谷歌应用程序验证的应用时
- 24. 响应谷歌地图
- 25. 谷歌图表响应
- 26. 谷歌地图API响应
- 27. 如何验证C#中的OpenId标记?
- 28. 如何验证http响应头?
- 29. 如何使用Pact验证XML响应
- 30. 如何验证WSDL和SOAP响应?
我可能是误会,但Google不提供此电子邮件检查为您创造一个id过吗? – barrycarter 2010-06-02 14:48:01