pear / net_webfinger
PHP的WebFinger实现
Requires
- pear/xml_xrd: *
Requires (Dev)
- pear/cache: *
- pear/http_request2: *
- phpunit/phpunit: *
Suggests
- pear/cache: Install optionally via your project's composer.json
This package is auto-updated.
Last update: 2024-09-10 18:56:40 UTC
README
PHP的WebFinger客户端库。
通过用户的电子邮件地址发现有关用户的其他元数据。可发现的数据可以是用户的OpenID、个人资料页面URL、可移植联系人链接、hcard、foaf和其他用户页面。
分布式社交网络使用WebFinger来分发公开加密密钥、OStatus和Salmon URL。
该软件包支持Webfinger(RFC 7033)并可回退到RFC 6415(host-meta + lrdd)。
内容
错误处理
该软件包不抛出任何异常。技术上,Net_WebFinger_Error
对象是异常,但它们仅作为Net_WebFinger_Reaction
对象的$error
属性设置。
如果您只想获取数据,则可以完全忽略它们。
有时甚至需要忽略数据。例如,Yahoo有一个host-meta
文件,但没有LRDD文件。OpenID提供者的URL已经记录在host-meta
中,因此即使检索LRDD文件失败,仍然可以获取有关OpenID提供者的信息。
错误处理示例
Net_WebFinger_Reaction
对象有一个包含错误消息和代码的异常的$error
属性。它甚至还有一个包含更多底层细节的前一个异常对象。
<?php require_once 'Net/WebFinger.php'; $wf = new Net_WebFinger(); $react = $wf->finger('user@example.org'); if ($react->error !== null) { echo "Error when fetching " . $react->url . "\n"; echo "Error: " . $react->error->getMessage() . "\n"; if ($react->error->getPrevious()) { echo "Underlying error: " . $react->error->getPrevious()->getMessage() . "\n"; } } ?>
示例
OpenID发现
<?php require_once 'Net/WebFinger.php'; $wf = new Net_WebFinger(); $react = $wf->finger('user@example.org'); if ($react->error) { echo 'There was an error: ' . $react->error->getMessage() . "\n"; } $openIdProvider = $react->get('http://specs.openid.net/auth/2.0/provider'); if ($openIdProvider !== null) { echo 'OpenID provider found: ' . $openIdProvider . "\n"; } ?>
简单链接访问
一些常见的链接关系在Net_WebFinger
中有简短名称。可以使用这些简短名称更容易地访问它们。
<?php require_once 'Net/WebFinger.php'; $wf = new Net_WebFinger(); $react = $wf->finger('user@example.org'); if ($react->error) { echo 'There was an error: ' . $react->error->getMessage() . "\n"; } if ($react->openid !== null) { echo 'OpenID provider found: ' . $react->openid . "\n"; } ?>
当前支持的简短名称
联系人
hcard
OpenID
个人资料
xfn
请参阅类Net_WebFinger_Reaction
中的列表$shortNameMap
。
访问所有链接
您可以使用foreach
遍历反应对象以获取所有链接。
<?php require_once 'Net/WebFinger.php'; $wf = new Net_WebFinger(); $react = $wf->finger('user@example.org'); foreach ($react as $link) { echo 'Link: ' . $link->rel . ' to ' . $link->href . "\n"; } ?>
缓存
使用缓存,检索的文件将被存储在本地,当再次加载相同的标识符(电子邮件地址)时,以及当检索同一主机的另一个标识符时,将导致查找时间更快。
<?php require_once 'Net/WebFinger.php'; require_once 'Cache.php'; $wf = new Net_WebFinger(); $wf->setCache( new Cache('file', array('cache_dir' => sys_get_temp_dir() . '/myapp')) ); $react = $wf->finger('user@example.org'); $openIdProvider = $react->get('http://specs.openid.net/auth/2.0/provider'); ?>
注意:PEAR的Cache_Lite软件包不支持每个项目的生存时间,因此我们无法使用它:http://pear.php.net/bugs/bug.php?id=13297
安全性
当可能时,所有文件都将通过SSL检索,并回退到常规HTTP。
对于纯webfinger文件,回退仅在启用$fallbackToHttp
时发生。对于host-meta
和LRDD文件,回退始终开启。
还会验证XRD主题。如果不匹配电子邮件地址的主机名,则设置错误对象。
<?php require_once 'Net/WebFinger.php'; $wf = new Net_WebFinger(); $react = $wf->finger('user@example.org'); if ($react->error || !$react->secure) { die("Those data may not be trusted\n"); }
自定义HTTP适配器
如果您想发送特殊的HTTP标头或需要例如代理设置,可以使用自己的HTTP适配器来检索文件。
<?php require_once 'HTTP/Request2.php'; require_once 'Net/WebFinger.php'; $req = new HTTP_Request2(); $req->setConfig('follow_redirects', true);//needed for full compatibility $req->setHeader('User-Agent', 'MyApp 1.42'); $wf = new Net_WebFinger(); $wf->setHttpClient($req); $react = $wf->finger('foo@example.org');
测试
您可以使用这些标识符来测试在各个提供商上的WebFinger功能。
- Gmail: evalpaul@gmail.com
- Yahoo: mcorne@yahoo.com
- AOL: M4dSquirrels@aol.com
- 其他
- 去中心化网络: kevinkleinman@joindiaspora.com
- status.net: singpolyma@identi.ca
链接
参考
- Webfinger 邮件列表
- 第一版 Webfinger 规范
- 常见的链接关系
- IETF Webfinger 草案
- http://hueniverse.com/2009/09/implementing-webfinger/
- http://hueniverse.com/2009/09/openid-and-lrdd/
- http://paulosman.me/2010/02/01/google-webfinger.html Google 已经为所有拥有 Google 个人资料的用户推出了 WebFinger 支持。
- Finger 历史
- XRD 1.0 规范
其他实现
请参阅 http://www.packetizer.com/webfinger/software.html
- Ruby
- Perl: WWW::Finger::Webfinger
- PHP: discovery-php
- PHP WordPress 插件: 博客文章, webfinger-profile 插件