OpenID ベースの IdP 検出の PHP 実装?
-
11-09-2019 - |
質問
Google は、自動マジック エンドポイント検出機能を備えた非常に優れたユーザー フレンドリーなフェデレーテッド OpenID ログインを提供しています。
これは Java サーブレットで実装されていますが、php-openid と組み合わせて使用できる同等の PHP はありますか?
検出メカニズムである XRDS については、次のドキュメントで説明されています。
- groups.google.com/group/google-federated-login-api/web/openid-discovery-for-hosted-domains
「DiSo の XRDS-Simple」のようなものが機能するはずですが、基本的なテストでは有用な結果が得られません。
- code.google.com/p/diso/
ありがとう、
解決
Google の Host-Meta Discovery メカニズムをサポートするために XRDS-Simple 実装を変更するのは比較的簡単であることがわかりました。注意点としては、これは Google の名前空間内での実験的な検出メカニズムであり、将来的にはグローバルに独立したシステムにより適したものに変更されるはずです。
XRDS-Simple 用のパッチ:
PHP-OpenID にフィードする ID URL を検索するための使用例:
<?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";
}
?>
所属していません StackOverflow