提供商/客户2-legged OAuth我对此有正确的理解? (PHP实现示例)

时间:2011-03-13 10:04:55

标签: php oauth two-legged

我为一组数据提供开发人员API,我想添加两条腿的oauth身份验证,以便我可以验证开发人员应用程序以使用api。 首先,对于此类身份验证,这是最佳解决方案吗?

其次,从实现/流程的角度来看,我的理解是正确的:

  1. 随机开发者,访问我的网站并使用“注册”页面,在提交时我会生成一个api 密钥密钥,无论如何我都希望生成。

  2. 然后他们使用像{php}那样的oauth库来here用这些凭据签署他们的请求。

    $ consumer = new OAuthConsumer('thegeneratedkey','thegeneratedsecret');

  3. $ sig_method = new OAuthSignatureMethod_HMAC_SHA1;

    //use oauth lib to sign request
    $req = OAuthRequest::from_consumer_and_token($consumer, null, "GET", 'http://mydonaim/api/', array('someapimethod', 'somevalue'));
    $sig_method = new OAuthSignatureMethod_HMAC_SHA1();
    $req->sign_request($sig_method, $consumer, null);//note: double entry of token
    
    1. 我的服务器然后使用oauth库检查该请求的“签名”以验证开发人员应用程序。
    2. $ secret ='secret'; //忽略这一行。

      $secret = 'secret'; // Use the $_GET['oauth_consumer_key'] to find the secret in my system.
      $consumer = new OAuthConsumer($_GET['oauth_consumer_key'], $secret);
      $sig_method = new OAuthSignatureMethod_HMAC_SHA1;
      
      $method = $_SERVER['REQUEST_METHOD'];
      $uri = 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
      $sig = $_GET['oauth_signature'];    
      $req = new OAuthRequest($method, $uri);
      
      //token is null because we're doing 2-leg
      $valid = $sig_method->check_signature( $req, $consumer, null, $sig );
      

      这是对的吗?

      如果是这样,每次发出请求时都必须进行此身份验证,还是可以生成某种令牌以减少从开发者应用到我的api的每个HTTP请求的权重?

1 个答案:

答案 0 :(得分:1)

  

首先,对于这种类型的身份验证,这是最佳解决方案吗?

OAuth旨在允许应用程序在不知道用户凭据的情况下从第三方服务获取用户数据。只要这就是您需要做的事情,那么OAuth就是您的最佳解决方案。

  

如果是这样,每次发出请求时都必须进行此身份验证,还是可以生成某种令牌以减少从开发人员应用程序到我的api的每个HTTP请求的权重?

每个API请求都必须提供两组令牌/密钥,并将其传递到您的OAuth库进行身份验证。这就是OAuth的工作方式。你不应该将另一个令牌添加到流程中,因为这只会使事情变得更加复杂,并且会让最终得到OAuth的任何可怜的开发人员感到困惑。

请记住,密钥集存在,因此可以撤销对整个应用程序的访问权限,因此用户也可以这样做,假设你给他们一个接口来这样做。每个请求都包含这两个集合,因此您的应用程序可以检查它们的有效性。

除非您已执行基准测试和分析,并确定请求的大小是您需要处理的事情,否则不要担心HTTP请求的“权重”。我几乎可以保证这不是问题。