SSO/身份验证与外部“目录服务”的集成

时间:2011-02-08 作者:anu

我即将开始为客户机开发一个原型,其中一个必需的功能是与内部用户身份验证/注册系统集成。

该系统将充当权威用户数据库,并为创建新用户和验证有效用户提供RESTful界面。

我需要能够在WP中创建新用户,并且作为该过程的一部分,调用外部身份验证API来创建/验证该用户。

有效用户但WP未知的人应该能够登录评论,而无需自己在WP网站上注册。

登录整个网站的人也应自动登录WordPress。

我认为下面是一条路。

(1)是否有注册挂钩可以使用?

对于(2)-我假设我挂接了身份验证过滤器-即当有人尝试登录时,我会捕获该过滤器,调用外部系统,然后处理WP登录或将其重定向到注册过程,其中(1)需要oer。

对于(3)-阅读主站点设置的登录cookie并继续(2)?

我想我还需要在users和usermeta表中插入一条记录。

那么,以上这些有意义吗?难道我没有想过什么吗。任何人都有很好的资源来帮助这项工作(@hakre-我看到你在这方面做了一些工作!!)。

更新,所以我仍在对此进行抨击,基本上我正在尝试连接到身份验证过滤器,并使用它来:

检查是否设置了“主”站点的登录cookie,如果设置了,则根据其身份验证API重新验证,如果有效,则使用wp_signon(),使用主站点cookie中包含的信息(电子邮件和哈希密码)作为WP的凭据如果未设置cookie,请重定向到主站点登录页面并获取登录/注册,然后返回步骤1,如果存在经过身份验证的主站点用户,则不存在WP用户,创建它,然后进行“透明”登录(即让用户看不到WP登录表单)基本上,我想为主要发表评论的用户完全隐藏WP登录表单,然后找到一种允许作者和管理员直接访问它的方法。

进展相当缓慢,以下是我需要的帮助:

验证筛选器是否正确使用?它似乎并不是在我所期望的所有情况下都会被调用-例如,meta小部件显示登录/注销链接,而不触发authenticate挂钩

我可以wp_signon() 返回WP_User 对象(表示成功),但它不会影响登录状态-即meta小部件仍将显示在“中”;“登录”;即使在刷新之后。

感谢您的帮助:)

4 个回复
最合适的回答,由SO网友:anu 整理而成

好的,对我有效的方法如下:

假设主站点用户数据库是权威的。主站点登录cookie包含站点密码的ID和哈希。

从主站点获取cookie,并根据主站点的身份验证API重新验证它

如果有效,请使用返回值中的电子邮件地址作为\'user_login\' WP的值,哈希站点密码作为WP密码。

使用以下方法测试WP中是否存在此用户wp_authenticate(\'user_login\', \'user_pass\'). 这将返回WP_User 对象,或WP_Error 对象失败。

如果WP_Error/is_wp_error(), 然后使用usewp_update_user() 创建用户(或使用更改的密码更新用户)。

通过登录wp_set_current_user(), wp_set_auth_cookie()do_action(\'wp_login, id)

(这些都包含在附加到\'init\' 行动)

这似乎是可行的-自动创建WP未知的有效站点用户。密码更改是为了满足需要,如果设置了站点cookie,并且WP用户存在,那么SSO是自动的,而且非常无缝。

SO网友:Dougal Campbell

整个身份验证系统是可插拔的。我建议查看现有插件,了解如何覆盖系统。也许通过看一些LDAP plugins?

SO网友:Rarst

有条件地定义了多个与用户相关的函数!function_exists() 在里面wp-includes/pluggable.php 并且很容易用您自己的版本覆盖。

SO网友:Ryan

Enabling Single-Sign-On in WordPress took me 18+ hours of struggle but might take you only a few minutes:

基本上,你会想使用https://wordpress.org/plugins/wp-force-login/ 以及https://as.wordpress.org/plugins/jwt-authenticator/ 然后在主站点上创建一个受身份验证保护的端点,该端点生成JWT(JSON Web令牌)并重定向回WordPress站点的特殊URL。

看见full code here.

结束

相关推荐

Login form in popup

我将WP3与defaul主题一起使用。我希望人们在提交评论之前注册。我想做的是建立一个链接,而不是像“留下评论”这样的评论表单。单击此链接将打开一个弹出窗口,其中包含登录/注册表单或评论表单(如果用户已登录)。这可能吗?谢谢