我为一组数据提供了一个开发者 API,我想添加 2-legged oauth 身份验证,以便我可以对开发者应用程序进行身份验证以使用该 api。首先,对于这种类型的身份验证,这是最好的解决方案吗?
其次,从实现/流程的角度来看,我的理解是否正确:
一个随机的开发者,去我的网站并使用一个“注册”页面,当我提交给他们一个 api key和secret时,我可以以任何我希望的方式生成。
然后,他们使用 oauth 库(如此处找到的 php 库)使用这些凭据对他们的请求进行签名。
$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
- 然后,我的服务器使用 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 请求的权重?