Я пытаюсь добавить авторизацию throw google openid своим пользователям. Я получаю id (https://www.google.com/accounts/o8/id?id=AIt...Ew-Bo), но как я могу проверить, что это законно. Я имею в виду, что пользователь может создать вредоносный запрос с электронной почтой другого пользователя, как я могу проверить, что возвращаемый адрес электронной почты и заявленный идентификатор являются законными?как проверить ответ google openid
ответ
OpenID Google (для Google Apps для доменов OpenID исключен) является стандартным OpenID. Вы должны принять все меры предосторожности, которые любой другой OpenID требует, чтобы утверждение было законным. Вы правы ... любой может создать положительное утверждение OpenID, чтобы обмануть ваш RP, если ваш RP не проверит подпись, не выполнит обнаружение в идентификаторе и не сопоставляет авторизованную конечную точку OP для этого идентификатора с тем, который подписал ответ.
Что касается доверия к электронной почте, это зависит от вас. Вы можете доверять конечной точке Google OP, и тогда вы знаете.
Вместо того, чтобы пытаться реализовать проверку обнаружения и подписи самостоятельно, вы действительно должны использовать одну из многих библиотек, которые уже созданы для этой цели. Вот связка для различных языков программирования:
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;
}
}
Вы не должны полагаться на $ _GET, потому что данные ответа могут быть в $ _POST. – AlBeebe
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 Connect: как проверить id_token?
- 2. Ответ на неявный ответ OpenID
- 3. Liferay + google openid КАК?
- 4. Проверить защищенное перенаправление OpenID?
- 5. Facebook OpenID против Google OpenId
- 6. Открытые ключи Google OpenID Connect
- 7. Работа с Google OpenID
- 8. Анализ Google OpenID Callback
- 9. Ответ AOL OpenID слишком длинный
- 10. . Google openID выпуск токен?
- 11. Google OpenId и Google APIs
- 12. Django + Google SSO openid
- 13. Google OpenID openid.return_to
- 14. Google Apps OpenID URL
- 15. OpenID и Google припаркованные домены
- 16. Google OpenID - как использовать checkid_immediate в javascript?
- 17. OpenID AX, Google и mod_rewrite
- 18. Google OpenID Connect соответствие
- 19. OpenId + Bort + google
- 20. Google OpenID Authentication
- 21. OpenID на Google ничего
- 22. Как проверить ответ SAML
- 23. Как проверить OpenID в рельсах с огурцом
- 24. OpenID для Google App Engine
- 25. Реализация DotNetOpenAuth и Google OpenID
- 26. Получить OpenId FullName от Google
- 27. google codejam: как отправить ответ
- 28. Подскажите, как вводить пароль - Google OpenID Connect
- 29. Реализация OpenID аккаунта Google, такого как Stackoverflow
- 30. Как получить Openid для учетной записи google
Я, наверное, недоразумение, но не Google сделать это письмо проверки для вас, прежде чем создавать идентификатор? – barrycarter