【问题标题】:Provider/Client 2-Legged OAuth I am understanding this correctly? (PHP implementation example)Provider/Client 2-Legged OAuth 我理解正确吗? (PHP实现示例)
【发布时间】:2011-03-14 00:03:30
【问题描述】:

我为一组数据提供了一个开发者 API,我想添加 2-legged oauth 身份验证,以便我可以对开发者应用进行身份验证以使用该 API。 首先,对于这种类型的身份验证,这是最好的解决方案吗?

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

  1. 一个随机的开发者,访问我的网站并使用一个“注册”页面,提交时我为他们生成一个 api keysecret,可以以我希望的方式生成。

  2. 然后,他们使用像 here 发现的 php 之类的 oauth 库来使用这些凭据签署他们的请求。

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

$sig_method = 新 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 库检查该请求的“签名”,以对开发者应用进行身份验证。

$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 请求的权重?

【问题讨论】:

    标签: php oauth two-legged


    【解决方案1】:

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

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

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

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

    请记住,密钥集的存在是为了可以撤销对整个应用程序的访问权限,并且用户也可以这样做,前提是您为他们提供了这样做的接口.这两个集合都包含在每个请求中,因此您的应用程序可以检查它们的有效性。

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

    【讨论】:

    • 感谢您回答“OAuth 旨在允许应用程序在不知道用户凭据的情况下从第三方服务获取用户数据。”你不是特别在谈论 3-legged oauth 吗?
    • 我确实是在专门谈论普通的老式“三足”OAuth。
    • 所有偶然发现这个问题并想知道在哪里可以找到完整代码的人。 developer.yahoo.com/blogs/ydn/posts/2010/04/…
    猜你喜欢
    • 2011-02-02
    • 1970-01-01
    • 2011-03-03
    • 2011-04-14
    • 2015-07-17
    • 2013-08-21
    • 2014-11-04
    • 1970-01-01
    • 2012-03-19
    相关资源
    最近更新 更多