Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 用于多个服务使用的API的OAuth_Php_Api_Security_Oauth - Fatal编程技术网

Php 用于多个服务使用的API的OAuth

Php 用于多个服务使用的API的OAuth,php,api,security,oauth,Php,Api,Security,Oauth,我目前正在为phpBB开发一个API,作为我的googlesummerofcode项目的一部分。API的要点是使开发人员能够创建连接到phpBB板的应用程序 用户需要一种正确的身份验证方法(显然,让用户直接在应用程序中输入用户名和密码是个坏主意),我一直在考虑多种方法来实现这一点 我已经完成了自己的实现,但与我交谈过的人说我更应该使用OAuth。我已经阅读了一周关于OAuth的内容,但我不完全确定在这种情况下应该如何使用它。我从三条腿的OAuth得到的信息是,应用程序开发人员必须在服务上注册他的

我目前正在为phpBB开发一个API,作为我的googlesummerofcode项目的一部分。API的要点是使开发人员能够创建连接到phpBB板的应用程序

用户需要一种正确的身份验证方法(显然,让用户直接在应用程序中输入用户名和密码是个坏主意),我一直在考虑多种方法来实现这一点

我已经完成了自己的实现,但与我交谈过的人说我更应该使用OAuth。我已经阅读了一周关于OAuth的内容,但我不完全确定在这种情况下应该如何使用它。我从三条腿的OAuth得到的信息是,应用程序开发人员必须在服务上注册他的应用程序,以便在获得客户端令牌之前接收消费者令牌。这是不可能的,因为开发人员不能在所有phpBB板上注册他的应用程序

我一直在考虑应用程序是否会自动从服务器获取消费者令牌,然后再从客户端令牌,但对我来说,这似乎违背了三条腿OAuth的观点

我读过一些关于双腿OAuth的文章,但据我所知,您不应该将其用作身份验证,而更多的是用于内部应用程序

到目前为止,我实现的身份验证系统如下所示:

  • 应用程序从phpBB板请求身份验证令牌和签名令牌
  • 提示用户访问phpBB板上的身份验证页面,并将令牌作为参数
  • 应用程序通过phpBB板验证令牌是否有效,用户必须在浏览器中通过身份验证阶段后通知应用程序执行此操作
  • 当执行请求时,例如
    /api/forums/2/topics
    ,应用程序将向请求添加身份验证令牌和序列:
    /api/forums/2/topics?auth_token=token&serial=2
    ,其中序列是一个不断增加的数字,用于停止重播攻击。然后应用程序使用HMAC-SHA256对请求进行散列,并将其作为另一个GET参数附加到请求中。服务器执行相同的散列,以查看其是否正确。这样,攻击者就无法伪造请求,除非他们在初始交换时获得签名令牌

  • 我在尝试了解OAuth的同时,试图弄清楚我是否应该尝试实现OAuth而不是这个简而言之:OAuth如何跨多个服务工作,而不让开发人员为每个服务注册?

    如果没有集中式服务,OAuth可能不是正确的选择。即使您允许开发人员为给定实例动态创建应用程序条目,他们仍然需要首先在每个实例上注册,以便您知道谁也应该关联OAuth应用程序


    也许类似的东西更适合你的需要?

    我在考虑中央回购,但这很可能不起作用,因为这是一项官方功能,我很确定phpBB没有足够的资源来运行类似的东西。关于HTTP签名,我将对此进行详细研究。虽然它提到你应该在HTTPS上使用它,但这不会真正起作用,因为我认为很多phpBB板都没有HTTPS。你还相信HTTP签名会比我现在拥有的更好、更安全吗?