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


15

我将开始为客户设计原型-所需的功能之一是与内部用户身份验证/注册系统集成。

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

  1. 我需要能够在WP中创建新用户,并且在该过程中需要调用外部身份验证API以创建/验证该用户。

  2. 一个有效用户但不为WP所知的人应该能够登录以发表评论,而无需自己在WP网站上进行注册。

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

我在想以下是要走的路。

  • 对于(1)-是否可以使用注册钩?

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

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

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

因此,以上是否有意义-我是否未考虑任何事情。任何人都有很好的资源来帮助解决此问题(@hakre-我看到您已经在此方面做了一些工作!!)。

更新资料

因此,我仍然对此有点b之以鼻,本质上讲,我试图插入身份验证过滤器,并将其用于:

  1. 检查是否设置了“主”站点的登录cookie,如果已设置,则根据其身份验证API重新验证,如果有效wp_signon(),则使用主站点cookie中包含的信息(电子邮件和哈希密码)强制使用WP登录。作为WP的凭证
  2. 如果未设置Cookie,请重定向到主站点登录页面并获得登录名/注册名,然后返回到步骤1
  3. 如果存在经过身份验证的主站点用户时没有WP用户,请创建它,然后进行“透明”登录(即,使用户看不到WP登录表单)

基本上,我想完全将WP登录表单隐藏起来,而这些用户只打算主要发表评论,然后找到一种方法,允许作者和管理员直接访问它。

进度相当缓慢,以下是我可以使用的一些帮助:

  • 认证过滤器是正确使用的过滤器吗?我似乎并没有在所有情况下都调用它-例如,meta小部件显示登录/注销链接而未启用身份验证钩子

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

任何帮助表示感谢:)


也许这应该是一个单独的问题?
阿努

哦,我不知道是否允许提及此事,但我很乐意为此花半天的时间-个人资料中的联系方式。
阿努

Answers:


12

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

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

  2. 从主站点获取cookie,然后根据主站点的身份验证API对其进行验证

  3. 如果有效,请使用返回值中的电子邮件地址作为'user_login'WP 的值,并将散列的站点密码用作WP密码。

  4. 使用测试该用户是否存在于WP中wp_authenticate('user_login', 'user_pass')。如果WP_User成功,则返回一个对象,如果失败,则返回一个对象WP_Error

  5. 如果为WP_Error/is_wp_error(),则使用use wp_update_user()来创建用户(或使用更改后的密码更新用户)。

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

(所有这些都包含在该'init'动作附带的函数中)

这似乎可行-WP未知的有效站点用户将自动创建。可以处理密码更改,并且如果设置了站点cookie,并且WP用户存在,则SSO是自动的并且非常无缝。


1
+1很棒的描述/答案。希望您能找到一天的时间来展示更多细节。会帮助我们其他人避免大多数的审判/错误;)
kaiser 2012年

1
这正是我正在寻找的东西,您能再解释一下该过程吗?特别地,步骤1,2,3对我来说不是很清楚。谢谢!!
chifliiiii


1

几个与用户相关的功能是有条件地在!function_exists()中定义的wp-includes/pluggable.php,很容易被您自己的版本覆盖。


1

在WordPress中启用单点登录使我花了18个小时以上的时间,但可能只花了几分钟时间:

基本上,你要使用https://wordpress.org/plugins/wp-force-login/和修改后的版本https://as.wordpress.org/plugins/jwt-authenticator/,然后创建一个auth主站点上受保护的端点,该端点生成JWT(JSON Web令牌)并重定向回WordPress网站的特殊URL。

在此处查看完整代码


感谢您的回答。不鼓励仅链接的答案,因为链接可能消失并且使您的答案无用。最好在这里包括相关位。
凯撒
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.