реализация обслуживает что-то похожее с tinyurl или bit.ly, я, хотел бы подвергнуть сервис как API, я использую Java и свитер как реализация услуги RESTfull.
Я ищу самый простой путь к аутентификации пользователей, которые используют API, OAuth является первой вещью, прибывающей в памяти, но проблема, мне не нужны эти 3 повторения вызовы с маркерным запросом запроса, чем запрос маркера доступа с передачей URL обратного вызова. Я просто должен дать пользовательскую способность вызвать API без дополнительных вызовов безопасности к моему серверу.
Благодаря комментарию patrickmcgraw я использовал 2-ногую аутентификацию 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);
если вы используете http на транспортном уровне, вы всегда можете использовать базовую аутентификацию http