gpt4 book ai didi

java - RESTful API (java jersey) 的认证和授权

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:57:29 24 4
gpt4 key购买 nike

使用 tinyurl 或 bit.ly 实现类似的服务,我想将服务公开为 API,我使用 java 和 jersey 作为 RESTfull 服务实现。

我正在寻找对使用 API 的用户进行身份验证的最简单方法,首先想到的是 OAuth,但问题是我不需要这 3 次带有请求 token 查询的迭代调用,而不需要带有回调的访问 token 查询网址传递。我只需要让用户能够调用 api,而无需对我的服务器进行额外的安全调用。

最佳答案

感谢 patrickmcgraw 的评论,我使用了 2-legged oauth 身份验证。这是一些 java 代码。

对于客户端(使用 Jersey api):

OAuthParameters params = new OAuthParameters().signatureMethod("HMAC-SHA1").
consumerKey("consumerKey").version("1.1");

OAuthSecrets secrets = new OAuthSecrets().consumerSecret("secretKey");
OAuthClientFilter filter = new OAuthClientFilter(client().getProviders(), params, secrets);


WebResource webResource = resource();
webResource.addFilter(filter);

String responseMsg = webResource.path("oauth").get(String.class);

在供应商方面:

@Path("oauth")
public class OAuthService {
@GET
@Produces("text/html")
public String secretService(@Context HttpContext httpContext) {
OAuthServerRequest request = new OAuthServerRequest(httpContext.getRequest());

OAuthParameters params = new OAuthParameters();
params.readRequest(request);
OAuthSecrets secrets = new OAuthSecrets().consumerSecret("secretKey");

try {
if(!OAuthSignature.verify(request, params, secrets))
return "false";
} catch (OAuthSignatureException ose) {
return "false";
}

return "OK";
}
}

这是 PHP 客户端的代码:

<?php 

require_once 'oauth.php';

$key = 'consumerKey';
$secret = 'secretKey';
$consumer = new OAuthConsumer($key, $secret);

$api_endpoint = 'http://localhost:9998/oauth';
$sig_method = new OAuthSignatureMethod_HMAC_SHA1;

$parameters = null;
$req = OAuthRequest::from_consumer_and_token($consumer, null, "GET", $api_endpoint, $parameters);
$sig_method = new OAuthSignatureMethod_HMAC_SHA1();
$req->sign_request($sig_method, $consumer, null);//note: double entry of token

//get data using signed url
$ch = curl_init($req->to_url());
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$res = curl_exec($ch);

echo $res;
curl_close($ch);

关于java - RESTful API (java jersey) 的认证和授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2795404/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com