Реализация PHP OpenID на основе обнаружения IdP?
У Google есть очень удобный федеративный вход в систему OpenID с автоматическим обнаружением конечной точки:
Это реализовано в Java-сервлетах, есть ли PHP-эквивалент, который можно использовать вместе с php-openid?
Механизм обнаружения XRDS описан в следующем документе:
- groups.google.com/group/google-federated-login-api/web/openid-discovery-for-hosted-domains
Казалось бы, что-то вроде "DiSo's XRDS-Simple" должно работать, но базовое тестирование не дает полезных результатов.
- code.google.com/p/diso/
Спасибо,
1 ответ
Хорошо, я обнаружил, что относительно просто изменить реализацию XRDS-Simple для поддержки механизма обнаружения Host-Meta от Google. Предостережение в том, что это экспериментальный механизм обнаружения в пространстве имен Google, и через некоторое время он должен измениться на нечто более подходящее для глобально независимой системы.
Патч для XRDS-Simple:
Пример использования для поиска идентификатора URL для подачи в PHP-OpenID:
<?php
require_once 'XRDS.php';
require_once 'XRDS/Discovery.php';
$domain = 'google.com';
$disco = new XRDS_Discovery();
$disco->discovery_methods = array('XRDS_Discovery_Host_Meta');
$xrds = $disco->discover('https://www.google.com/accounts/o8/.well-known/host-meta?hd=' . $domain);
$xrd = $xrds->xrd[0];
$identityUri = $xrd->service[1]->uri[0]->uri;
if (0 == strcmp($xrd->canonicalId, $domain)) {
echo "identity uri: $identityUri\n\n";
} else {
echo "discovery failed.\n\n";
}
?>