我想添加授權將谷歌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. 獲得通過OpenID身份驗證谷歌聯繫人在Django
- 5. OpenID身份驗證與谷歌失敗隨機
- 6. 谷歌ClientLogin驗證
- 7. 無效的驗證密鑰響應從谷歌
- 8. 如何驗證SAML響應
- 9. 如何驗證RestTemplate響應?
- 10. 谷歌OpenID和谷歌的API
- 11. 如何驗證谷歌視頻代碼?
- 12. 如何驗證谷歌的地方AutoCompleteTextView
- 13. 響應谷歌Piechart
- 14. 響應谷歌圖
- 15. 谷歌App Engine的Facebook應用驗證
- 16. 谷歌應用程序身份驗證
- 17. 驗證谷歌驗證碼失敗
- 18. 谷歌驗證碼 - 驗證在VB .NET
- 19. 谷歌驗證碼用PHP驗證
- 20. 的Facebook的OpenID VS谷歌的OpenID
- 21. 如何停止谷歌退出谷歌通知響應從谷歌退房
- 22. 驗證碼與谷歌AppEngine
- 23. 身份驗證firebase谷歌
- 24. 谷歌雲桶驗證域
- 25. 驗證碼與谷歌
- 26. 谷歌身份驗證C#
- 27. 谷歌的reCAPTCHA驗證
- 28. asp.net谷歌驗證碼
- 29. 谷歌reCAPTCHA與jQuery驗證
- 30. 谷歌的OAuth2驗證掛
我可能是誤會,但Google不提供此電子郵件檢查爲您創造一個id過嗎? – barrycarter 2010-06-02 14:48:01