2010-05-08 10 views
6

için doğrulama ve yetkilendirme, tinyurl veya bit.ly ile benzer bir hizmet uygulaması, API olarak hizmet vermek istiyorum, RESTfull hizmet uygulaması olarak java ve jersey kullanıyorum.RESTFull API (java jersery)

API kullanan kullanıcıların kimlik doğrulaması için en basit yolu arıyorum, OAuth akla ilk gelen şeydir, ancak sorun, erişim belirteci sorgusu ile erişim belirteci sorgusuyla bu 3 yineleme çağrısı gerekmez. geri çağırma URL'si geçiyor. Sadece sunucuma ek güvenlik çağrısı yapmadan api'yi çağırmak için kullanıcı yeteneği vermem gerekiyor. sen taşıma katmanında http kullanılıyorsa

+2

Eğer iki ayaklı google Eğer Oauth, açıkladığınız durum için onu kullanabileceğinizi göreceksiniz. Üçüncü bir tarafın bulunmadığı durumlarda (API'nin hizmetini yapan kişiler, değiştirdikleri verilere sahip olacaklardır), daha sonra yönlendirme gerekli değildir. OAuth 2.0 taslağında, SSL üzerinden yapılan bağlantılar artık imza isteğinde bulunmayı gerektirmiyor. – patrickmcgraw

+0

Evet, bunun en iyi yaklaşım olduğunu düşünün, isteğinizle parola göndermeniz gerekmediğinden, http kimlik doğrulamasından daha güvenlidir. – abovesun

cevap

11

Teşekkür kullanabilirsiniz. İşte bir java kodu. PHP istemci için kod

İşte
@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"; 
    } 
} 

geçerli::

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); 

sağlayıcı tarafında: istemci tarafında (Jersey API kullanarak) için

<?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); 
0

hep ben 2 bacaklı oauth authentificaton kullanılan Yorum patrickmcgraw için basic http authentication

+0

Cevabınız için teşekkürler, ancak iki bacaklı oauth hakkında patrickmcgraw doğru görünüyor – abovesun