indieweb / wordpress-indieauth
WordPress的IndieAuth端点和认证
Requires
- php: >=5.6.0
- composer/installers: ~1.0 || ~2.0
Requires (Dev)
- dealerdirect/phpcodesniffer-composer-installer: ^1.0
- mf2/mf2: ^0.5.0
- phpcompatibility/php-compatibility: *
- phpcompatibility/phpcompatibility-wp: *
- sebastian/phpcpd: ^3.0 || ^4.0 || ^6.0
- squizlabs/php_codesniffer: ^2.2 || ^3.5
- wp-coding-standards/wpcs: *
- yoast/phpunit-polyfills: ^2.0
- dev-trunk
- 4.5.2
- 4.5.1
- 4.5.0
- 4.4.2
- 4.4.1
- 4.4.0
- 4.3.0
- 4.2.1
- 4.2.0
- 4.1.1
- 4.1.0
- 4.0.0
- 3.6.2
- 3.6.1
- 3.6.0
- 3.5.1
- 3.5.0
- 3.4.2
- 3.4.1
- 3.4.0
- 3.3.2
- 3.3.1
- 3.3
- 3.2
- 3.1.11
- 3.1.10
- 3.1.9
- 3.1.8
- 3.1.7
- 3.1.6
- 3.1.5
- 3.1.4
- 3.1.3
- 3.1.2
- 3.1.1
- 3.1.0
- 3.0.4
- 3.0.3
- 3.0.2
- 3.0.1
- 3.0.0
- 2.1.1
- 2.1.0
- 2.0.3
- dev-dependabot/composer/yoast/phpunit-polyfills-tw-3.0
- dev-fix-health-check
- dev-wp-5.5-fixes
This package is auto-updated.
Last update: 2024-09-09 09:10:47 UTC
README
贡献者: indieweb, pfefferle, dshanske
标签: IndieAuth, IndieWeb, IndieWebCamp, 登录
至少需要 4.9.9
需要PHP 7.2
已测试到 6.6
稳定标签 4.5.2
许可证: MIT
许可证URI: https://open-source.org.cn/licenses/MIT
捐赠链接: https://opencollective.com/indieweb
IndieAuth是一种允许用户使用自己的域名登录其他网站和服务的认证方式。
描述
该插件将WordPress转换为一个IndieAuth端点。它可以作为WordPress及其REST API的认证机制,以及其他网站的标识机制。它使用个人资料页面的URL来标识博客用户或您的作者URL。我们建议您的网站通过https提供服务以使用此功能。
您还可以安装此插件以使用自己的域名启用网站的网络登录。
安装
- 将
indieauth
目录上传到您的/wp-content/plugins/
目录 - 通过WordPress的“插件”菜单激活插件
- 就这么多
常见问题解答
什么是IndieAuth?
IndieAuth是一种Web登录方式,您可以使用自己的主页或作者帖子URL(通常为/author/authorname)登录到其他地方。它是建立在OAuth 2.0之上,许多网站都在使用OAuth 2.0。
为什么需要IndieAuth?
IndieAuth是OAuth的扩展。如果您是开发者,您可能已经使用OAuth来获取API的访问权限。作为用户,如果您已经允许应用程序访问您在服务上的帐户,您可能已经使用OAuth。IndieAuth的一个优点是它允许每个人的网站都成为自己的OAuth服务器,而无需每个网站都注册应用程序。
IndieAuth与OAuth有什么不同?
IndieAuth建立在OAuth 2.0之上,并不同之处在于用户和客户端由URL表示。客户端可以验证用户的身份,并获取可以用于访问用户资源的OAuth 2.0 Bearer令牌。
您可以阅读规范以获取实现细节。
Web登录与OpenID有什么不同?
OpenID和Web登录的目标类似。两者都鼓励您使用自己的域名登录网站。然而,OpenID未能获得广泛的采用。Web登录会提示用户输入一个URL进行登录。提交后,它会尝试发现URL的授权端点,并对其进行认证。如果没有找到,它会回退到其他选项。
此插件仅支持搜索外部站点以查找授权端点,允许您使用另一个站点的凭据登录到该站点,前提是该站点已列为您的用户配置文件中的网站URL。
什么是IndieAuth.com?
Indieauth.com 是 IndieAuth 协议的参考实现。如果您激活此插件,则不需要使用此网站。Indieauth.com 使用您网站上的 rel-me 链接来确定您的身份进行认证,但使用此插件(该插件使用您的 WordPress 登录来验证您的身份)并不需要这样做。
应用如何知道我的姓名和头像?
截至版本 3.2,端点返回您的用户资料中的显示名称、头像和 URL。
这需要每个用户都有自己的唯一域名吗?
不是。当您提供 WordPress 网站的 URL 并对 WordPress 进行认证时,它将返回您的作者资料 URL 作为您的唯一 URL。只有一个用户可以使用站点的 URL。此设置在插件设置页面中设置,或者如果只有一个用户,则默认为该用户。
我如何对 Indieauth 服务器进行认证?
如前所述,这取决于服务器。默认情况下,内置的 IndieAuth 服务器使用 WordPress 登录。
通过添加 Indieauth 支持,您只需提供您的 URL 即可登录网站。
这有多安全?
我们建议您的网站使用 HTTPS 来确保您的凭证不会被以明文形式发送。截至版本 3.3,此插件支持代码交换证明密钥(PKCE),如果客户端支持它。
什么是令牌端点?
一旦您证明了您的身份,令牌端点将发出一个令牌,应用程序可以使用该令牌以您的身份对您的网站进行认证。
您可以在“用户->管理令牌”下管理和撤销令牌。您将只会看到当前登录用户的令牌。
我如何将此集成到我的插件中?
WordPress 函数 get_current_user_id
用于检索通过 IndieAuth 登录的当前用户 ID。该插件提供了以下函数,以帮助您使用 IndieAuth 为您的服务。我们建议您通过检查 if ( class_exists( 'IndieAuth_Plugin') )
来确认激活 IndieAuth 插件。
indieauth_get_scopes()
- 获取认证请求的权限范围数组。indieauth_check_scope( $scope )
- 检查提供的权限范围是否在当前可用的权限范围内indieauth_get_response()
- 返回整个 IndieAuth 令牌响应indieauth_get_client_id()
- 返回客户端 IDindieauth_get_me()
- 返回当前会话的 me 属性。new IndieAuth_Client_Discovery( $client_id )
- 类,允许您发现有关客户端的信息$client->get_name()
- 类实例化后,检索名称$client->get_icon()
- 类实例化后,检索图标
如果这些中的任何一个返回 null,则表示未设置值,且 IndieAuth 未被使用。权限范围和用户权限不由 IndieAuth 插件强制执行,必须由使用它们的东西强制执行。该插件包含了一组权限描述,用于在授权时显示,但这只是为了帮助用户理解权限范围。
权限描述可以使用过滤器 indieauth_scope_description( $description, $scope )
进行自定义
如果我只想使用 REST API 而不是 OAuth 交换怎么办?
该插件允许您在“用户->管理令牌”下生成一个具有访问权限的令牌。您可以手动将其提供给应用程序。
我不断收到我的请求未授权的响应
许多服务器配置不会传递携带令牌。该插件尽可能地尝试与它一起工作,但可能有我们没有遇到的情况。第一步是尝试运行设置页面中链接的诊断脚本。它将告诉您是否可以传递令牌。
暂时启用 WP_DEBUG,这将使一些错误出现在您的日志中。
如果您熟悉命令行输入,您可以在“用户”->“管理令牌”下请求一个令牌,并使用curl或类似工具测试登录。将example.com替换为您自己的网站,将TOKEN替换为您的承载令牌。
curl -i -H 'Authorization: Bearer TOKEN' 'https://example.com/wp-json/indieauth/1.0/test
curl -i -H 'Authorization: Bearer test' 'https://tiny.n9n.us/wp-json/indieauth/1.0/test?access_token=TOKEN'
这将快速测试您认证服务器的功能。未来可能会有更多的诊断工具可用。
如果不起作用,您可以在您的wp-config.php文件中添加define( 'INDIEAUTH_TOKEN_ERROR', true );
。如果未传递令牌,INDIEAUTH_TOKEN_ERROR
标志将返回错误,这有助于您调试此问题,但是它将要求对所有的REST API功能进行身份验证,即使是那些不需要身份验证的功能,因此默认情况下它是关闭的。
如果您的Micropub客户端包括一个Authorization
HTTP请求头,但您仍然收到带有missing access token
正文内容的HTTP 401响应,那么您的服务器可能正在删除Authorization
头。如果您使用Apache,请尝试在您的.htaccess
文件中添加此行
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
如果您没有运行最新的WordPress版本,请尝试此行。自5.6版本起,它将自动添加。
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
您还可以尝试
CGIPassAuth On
如果这些方法都不起作用,您可能需要要求您的托管服务提供商为您的账户白名单Authorization
头。如果他们拒绝,您可以通过使用Apache的备用名称传递它。插件在REDIRECT_HTTP_AUTHORIZATION中搜索该头,因为一些FastCGI实现将头存储在此位置。
我收到一个错误,表明缺少参数redirect_uri,但我看到它在URL中
某些托管服务提供商使用mod_security过滤掉此参数。对于一位用户,他们需要将规则340162白名单,因为它检测到将URL用作参数的使用。
票证扩展是什么?我如何启用它?
票证扩展是OAuth2/IndieAuth的一个正在开发中的扩展。它会在您的网站上创建一个票证端点,其他站点可以发送票证到这个端点,这些票证可以兑换成访问其他站点的私有资源的令牌。您可以通过在wp-config.php中添加以下内容来启用实验性端点功能。如果这变得更为成熟,它将添加到设置页面中。
define( 'INDIEAUTH_TICKET_ENDPOINT', true );
目前,此功能仅限于接收票证,不包括发送票证。它在新用户菜单下启用了一个新的标签页,称为管理外部令牌,允许您查看存储的外部令牌。令牌按用户存储。
由于此扩展正在开发中,目前尚无将此令牌传输到客户端使用的方法。
升级通知
4.5.0
4.5.0移除了使用清单文件进行客户端发现的支持。这从未是官方规范的一部分,已被新添加的客户端json元数据选项所取代。
4.4.0
4.4.0移除了远程端点功能,这将在未来的某个时候作为一个单独的插件存档。它默认情况下已被禁用。它还移除了通过URL和密码登录的能力。Websignin登录是唯一的登录增强功能。
4.3.0
4.3.0将客户端应用数据的存储从每个令牌中嵌入改为存储在隐藏的分类中。旧的令牌不会自动更新。它还侧载了应用程序图标
4.2.0
4.2.0分支中的更改实现了对IndieAuth的未来的重大变更。在可预见的未来,将保持向后兼容性,但建议客户更新到最新版本的规范,以利用最新的机会。旧方法将继续存在,直到采用元数据端点足够。
4.1.0
引入了实验性的票据认证端点,允许接收票据和存储外部令牌。默认情况下,此功能是禁用的,只能通过标志来启用。
4.0.0
此版本启用过期令牌。所有现有令牌将保持原样。新令牌默认情况下将在14天后过期。您可以在设置中更改此设置。
3.6.0
由于本版本升级了规范遵守程度,以应对2020年11月26日以来的IndieAuth Living Standard的变化,因此可能存在客户无法满足这些变化的不预期问题。在更多的IndieAuth客户采用这些变化之前,一些变更元素将不是强制性的,例如PKCE合规性。
3.4.0
由于有人将他们的用户配置文件中的url设置为与其他账户相同,您将不再能够将完全相同的url保存到两个账户中。如果您已经设置了两个账户为相同的URL,则在下次保存冲突的用户配置文件时,其中一个将被清除。
3.3.2
由于人们在与他们的托管提供商经历的问题,插件现在会提醒您运行此测试。
3.0.0
在版本2.0中,我们向此插件添加了一个IndieAuth端点,该插件之前仅支持IndieAuth进行网页登录。版本3.0.0将端点代码与网页登录代码分开,并删除了使用第三方IndieAuth端点与您的网站一起使用的功能。如果您使用登录功能,它将查找您提供的URL的IndieAuth端点。如果您使用Micropub for WordPress,启用插件将使用WordPress的内置端点。如果您想使用Indieauth.com或另一个端点,您可以禁用此插件,Micropub将默认使用Indieauth.com。
变更日志
项目和支持在github上维护,地址为indieweb/wordpress-indieauth。
4.5.2
- 修复添加新客户端时的循环问题
- 为新客户端存储client_uri和最后修改日期。
4.5.1
- 修复如果logo_uri不是URL时的失败问题
- 修复由于未返回错误属性(属性 @janboddez)与Jetpack插件的冲突
4.5.0
- 移除客户端发现实验性清单搜索代码
- 添加对最近添加到规范的客户端JSON元数据文件的支持,并回退到MF2 HTML
- 修复声明问题(属性 @janboddez)
4.4.2
- 防止对其他成功的OAuth2插件返回401
4.4.1
- 添加客户端信息发现MF2解析器
- 修复票据端点并添加额外检查
- 修复发现未检查HTML链接中是否存在HTTP链接的问题
- 添加票据兑换流程的钩子
- 在收到票据时添加电子邮件通知
4.4.0
- 移除已禁用的远程端点功能
- 重新排列,使每个端点更加独立并注册其自己的参数
- 添加注册新授权类型的方式。
- 重写Web Signin以支持最新的流程版本。
- 将PKCE支持添加到websignin流程中
- 修复PKCE支持问题,其中它不会实际验证token流程中的PKCE,因为PKCE是可选的
- 反转PKCE消息,以突出显示是否在使用PKCE而不是不使用PKCE。
- 不要在不可检索的URL上进行客户端发现
- 验证标识符以符合IndieAuth规范
- 作为简化代码的努力的一部分,移除URL加密码登录
- 修复websignin表单中出现的错误消息
- 修复websignin和授权表单上的CSS,以避免语言栏错误渲染。
4.3.0
- 引入客户端分类法以存储客户端数据,使其不再单独存储
- 侧载客户端应用程序图标
4.2.1
- 修复旧远程端点代码中不加载用户令牌库的问题
- 修复未登录时不加载元数据端点的问题
4.2.0
- 添加服务器元数据端点
- 将发行者属性添加到授权响应中
- 在4.1.0版本中,引入了检查端点并与令牌端点共享端点。这种做法随着元数据端点的引入而被放弃,检查端点不再与令牌端点共享。因为这个功能只存在了一段时间,所以立即弃用。
- 添加了撤销端点。旧撤销方法将继续保留,直到元数据端点被充分采用。
- 添加用户信息端点。该端点返回授权流程期间提供的用户配置文件。
4.1.1
- 修复即使未启用票据身份验证,也会调用票据身份验证中的类的问题
4.1.0
- 添加实验性的票据身份验证端点
- 在票据身份验证开发期间发现端点发现错误
- 根据RFC7662的建议引入令牌检查端点。目前,它将同时与较旧的令牌验证响应存在,直到弃用。
- 确保在适当的情况下返回配置文件响应。
- 在单元测试中发现的杂项错误修复
- 更新设置配置
- 改进默认的用户,使他们能够作为网站的根用户进行识别。
- 引入刷新令牌功能
- 在作为选项提供时,新选择中未预先选中“创建”。
4.0.0
- 添加默认过期时间。
- 确保令牌在其适当的时间内过期。
- 清理与过期相关的问题
3.6.2
- 修复缺失的参数,props @chee
- 修复新清理中的问题,props @akirk
- 修复JSON中不正确编码的HTML问题
- 将测试令牌切换到与实际令牌长度相同的长度,以正确测试可能使用mod_security的服务器。
3.6.1
- 清理模板页面,以从i18n字符串中删除HTML。
3.6.0
- 采用2020年11月26日版本的活着的规范的变化。
- 取消对response_type=id的明确支持。端点将转换为类型代码以实现向后兼容,直到另行通知。
- 更改实验性配置文件返回行为,以匹配规范中的新文档行为。
- 支持配置文件和电子邮件作用域,将在本插件内处理。
- 添加额外的代码注释
- 删除唯一URL代码,因为不再支持查找用户URL
- 将UUID添加到令牌中,如WP5.6应用程序密码功能中使用。
- 将最后访问IP添加到存储中,如WP5.6应用程序密码功能中使用。
3.5.1
- 使站点健康更明确
- 更新作用域描述
- 调整作用域能力以更一致
3.5.0
- 恢复使用远程端点的功能,但目前将其隐藏。
- 添加加载函数和配置设置,以便加载适合您配置的文件
- 创建可以用于创建不同IndieAuth配置的授权插件基类
- 为SSL和唯一用户添加站点健康检查
- 创建本地和远程类,可以根据配置进行实例化
3.4.2
- 修复由函数名问题引起的其他流程问题
3.4.1
- 添加设置,以设置将使用站点URL作为其URL的用户,而不是其作者URL,从而消除对Indieweb插件的依赖。
3.4.0
- 强制用户帐户具有唯一的URL
- 将用户URL添加到用户表中
- 重新关联URL与用户帐户。目前,只允许根路径和作者存档URL作为返回值。希望在未来添加更多选项。
- 添加站点健康检查
- 改进授权失败时的文本和链接
3.3.2
- 添加新的诊断脚本,它会不断提醒您至少运行一次
- 在从端点返回时添加缓存控制头
- 在令牌端点验证令牌时未使用现在添加的REDIRECT_HTTP_AUTHORIZATION
- 向设置页面添加标题检查
- 添加选项,在后端使用任何作用域生成令牌
- 添加批量过期令牌的选项
- 添加清理选项
3.3.1
- 添加配置文件作用域的定义
- 改进README中的文档
3.3
- 从WordPress密码使用的内置加盐哈希切换到SHA256哈希
- 添加PKCE支持
3.2
- 仅在首页和作者存档页添加标题
- 在返回中返回基本配置文件数据,以便客户端可以显示用户的名称和头像
3.1.11
- 修复非数组时的静默转换问题
- 在设置令牌时自动添加客户端名称和图标
3.1.10
- 修复了图标确定时的PHP通知
- 静默将帖子作用域的请求转换为创建更新作用域
- 更新标语
3.1.9
- 修复了PHP警告
3.1.8
- 当执行本地验证时,代码没有更新配置文件URL,而是传递原始请求中的URL。此代码位于令牌端点的远程验证部分,现在已在该代码中镜像。
3.1.7
- 添加由@Zegnat编写的authdiag.php脚本
3.1.6
- 添加在后台生成令牌的功能
- 添加一个测试端点,该端点测试REST API的认证提供程序是否正常工作,并尝试返回有用的错误
3.1.5
- 添加客户端信息发现,以查找客户端的名称和图标
- 将图标和客户端名称添加到管理令牌页面
- 在管理令牌界面中添加刷新图标和其他信息的操作
3.1.4
- 重新排列令牌逻辑,以便如果提供令牌,则系统将失败,如果它无效
- 将最后访问字段添加到令牌中,并将其添加到令牌管理表中
3.1.3
- 允许选择作用域并添加库存描述
- 更新管理令牌页面以使用WP_List_Table
3.1.2
- 修复作用域编码问题
- 修复函数返回与父函数不同的问题
3.1.1
- 修复了小于PHP 5.4的版本中的PHP错误
3.1.0
- 修复了
state
参数处理
3.0.4
- 修复了管理员设置
3.0.3
- 直接从令牌端点验证用户ID,而不是映射URL。
- 在认证屏幕上显示$me参数而不是user_url
- 删除已弃用的函数和参数
3.0.2
- 如果本地站点使用SSL,则自动将本地URL重写为https
3.0.1
- 在先前版本中修复了如果缺少bearer令牌则不返回错误消息的问题。这需要因为一些服务器过滤令牌。然而,这意味着它会对所有API请求执行此操作,即使是不需要认证的请求,例如webmention。使用标志撤销更改
- 添加了常量
INDIEAUTH_TOKEN_ERROR
,如果将其设置为true,则在找不到令牌时将返回错误。
3.0.0
- 对令牌生成代码进行主要重构,以抽象化并改进
- 使用一个cookie代替多个cookie设置state。
- 将其他参数存储为transient
- 删除额外的设置
2.1.1
- 错误修复
2.1.0
- 重构以更改加载顺序
- 文本修复
- 当核心函数尚未启用时添加默认值
- 重构管理员界面
2.0.3
- 添加改进的getallheaders polyfill
- 检查缺少cookie
- 检查替代授权位置
2.0.2
- 如果使用本地端点,则在没有远程调用的情况下本地验证令牌
- 添加作用域和响应的过滤器,以便可以在其他地方访问它们
- 对state进行urlencode,因为一些信息被编码到state中,导致丢失
- 对于重定向的不同域,从失败消息切换到警告消息
- 如果未启用本地端点,则隐藏令牌端点管理页面
2.0.1
- 如果通过发送null端点改进错误处理
- 调整cookie到GMT
- 在表单中添加空白
2.0.0
- 支持作者个人资料,除用户URL外
- 将令牌验证方法更改为符合当前的Indieauth规范
- 添加支持令牌验证作为WordPress认证机制
- 添加设置任何令牌或授权端点的功能
- 向网站添加授权和令牌端点头
- 登录时发现并使用提供的URL的授权端点
- 允许使用URL登录
- 添加内置的令牌端点(感谢@aaronpk的支持)
- 添加内置的授权端点(感谢@aaronpk的支持)
- 默认隐藏使用域名登录的选项
- 登录域名的选项现在是一个单独的表单
- 自动向user_url添加尾部斜杠
1.1.3
- 更新README
1.1.2
- 修复了重定向URL
1.1.1
- WordPress编码风格
1.1.0
- 修复了关键漏洞
1.0.0
- 初始版本