我的网站需要与第三方软件集成,该软件将驻留在该软件公司托管的自己的子域中。我需要向第三方开发人员提供一个端点,他们可以使用该端点进行API调用(对我的wordpress网站),以允许我的网站的用户访问该子域。
另一个站点需要通过某种API从我的站点对用户进行身份验证。
我不确定从哪里开始,但是我的感觉是,比我聪明的人已经知道了这一点。提前致谢!
我的网站需要与第三方软件集成,该软件将驻留在该软件公司托管的自己的子域中。我需要向第三方开发人员提供一个端点,他们可以使用该端点进行API调用(对我的wordpress网站),以允许我的网站的用户访问该子域。
另一个站点需要通过某种API从我的站点对用户进行身份验证。
我不确定从哪里开始,但是我的感觉是,比我聪明的人已经知道了这一点。提前致谢!
Answers:
您不能在域之间传输WP auth cookie。您也不想存储用于以编程方式登录另一个WP安装的明文密码。因此,您必须让用户登录WordPress,然后从第三方站点通过API端点访问其登录状态。这可以让WordPress处理所有身份验证。这是非常安全的,因为用户必须物理登录到WP端才能使API端点将数据提供给第三方。
在这里查看我刚刚写的这篇文章:http : //coderrr.com/create-an-api-endpoint-in-wordpress/
另外,您可以在此处查看代码演示:https : //gist.github.com/2982319
您必须弄清楚自己的应用程序需求的逻辑,但这将允许您创建一个终结点,可以在其中提供WordPress方面所需的任何内容。
由于您使用WordPress作为身份验证站点,因此可以使用is_user_logged_in()之类的检查。如果他们已登录,则将用户对象及其所需的任何信息返回给第三方。
他们可以从第三方链接到您的登录页面,以使用redirect_to查询var获得无缝体验。登录后,它将把它们传递回第三方站点。
http://sub.yourdomain.com/wp-login.php?redirect_to=http%3A%2F%2Fwww.third-party-domain.com
如果您需要从第三方站点登录用户到WordPress,则可以使用此站点上列出的一些简单WP函数:http : //kuttler.eu/code/log-in-a-wordpress-user-programmatically/
您肯定需要使用共享机密,并根据该机密创建基于时间的哈希值,以确保事物的安全。基本上是这样的:
第三方发送带有时间戳和共享机密生成的令牌的请求:
$shared_secret = 'foobar'; //do not send this to the API endpoint
$timestamp = time();
$token = md5($shared_secret.$time_stamp);
WordPress安装收到请求:
$shared_secret = 'foobar';
$timestamp = esc_attr($_GET['timestamp']);
if((time() - $timestamp) > 30) # Threshold is 30 seconds
//do something here - TOKEN expired!
$token = md5($share_secret.$timestamp);
$token_to_check = esc_attr($_GET);
if($token == $token_to_check)
//authenticated!
counter
代替,time()
并将其与请求一起传递。双方保持最后一个计数器通过,并且当api收到带有新计数器的请求时,它将验证新计数器大于最后一个计数器。这样,延迟不会造成任何伤害。