WordPress as a OAuth Provider

时间:2013-06-26 作者:John

我刚刚开始阅读OAuth,因为我需要将它集成到WordPress web应用程序中。根据我对OAuth的理解,签名请求是在客户端和服务器之间发送的。这些签名的请求是通过服务器对用户/客户端进行身份验证的内容。

WordPress是一个无状态应用程序,它通过随每个请求一起发送的Cookie来处理身份验证。WordPress在收到带有请求的Cookie后,会自动设置当前用户。因此,我们可以使用如下条件current_user_can() 或用户对象,如$current_user 在代码中,用于各种用户能力检查和其他用户操作。

通过OAuth进行身份验证的客户端(如iPhone应用程序)不会存储或发送cookie,并期望通过OAuth进行授权访问。由于WordPress验证cookie没有传输,因此WordPress不会在此类请求期间设置用户。我知道我可以wp_set_current_user() 做同样的事。但我不确定我是否需要这样做,或者我是否应该这样做,或者我对将OAuth与WordPress结合使用的整个理解是有缺陷的?请帮助我了解如何将OAuth无缝集成到vanilla WordPress环境中?此外,我不想找任何现有的插件来完成这项工作。

1 个回复
SO网友:Otto

好的,在你的评论之后,我想我知道你在问什么了,但我不确定,所以我会尽可能地将其泛化。

WordPress使用authenticate 筛选挂钩以执行身份验证。您可以通过将自己的函数连接到此筛选器来添加其他身份验证方法。

这是身份验证函数的示例。这是一个危险而愚蠢的示例,因为它只是以用户1的身份登录,根本没有任何检查,但它显示了您需要返回什么函数来验证用户。

add_filter(\'authenticate\', \'myplugin_auth_example\', 30, 3);
function myplugin_auth_example($user, $username, $password) {
    // if user is already known, return it
    if ( is_a($user, \'WP_User\') ) { return $user; }

    // do your authentication via whatever method here
    // bottom line is that you need to get a valid WP_User object and return it

    // this example just gets user number 1 from the database and uses that
    // NOTE: this here is extremely dangerous and stupid, because it just logs everybody in instantly
    $user = new WP_User(1); 
    return $user;

    // if there is an error in authentication, you could do this instead    
    return new WP_Error( \'some_bad_auth_reason\', \'Your credentials were invalid.\' );

}

结束

相关推荐

Authentication/API Questions

我们正在尝试使用S2Member来管理我们的WP站点和我们正在启动的Flash程序的成员资格。我们希望在用户登录并保持登录状态时使用S2Member对其进行身份验证。问题:Java层需要知道哪个用户登录到Wordpress(如果有的话),以便它可以将正确的数据返回到flash层。建议的解决方案:Wordpress的cookie也应该包含在Flash到Java的请求中。Java可以使用这些cookie来查询Wordpress DB以获取用户ID。我们需要知道的是:1。是否可以从数据库或文件系统获取带有coo