2009-11-13 83 views
55

Estoy buscando una biblioteca Java que me ayude a crear un proveedor OAuth. Debo poder recibir solicitudes firmadas por OAuth y determinar si son válidas o no (verificando la firma, la marca de tiempo y los valores nonce).Biblioteca para OAuth Provider (Java)

¿Sabes si hay algo que facilita esta tarea?

+7

En otras palabras, lo que estas buscando es una biblioteca Java que da cuenta de un proveedor OAuth * * no * consumidor*. Es posible que desee editar su pregunta para corregir eso. – Matthias

+0

Pablo, por favor, cambie el título de su pregunta y su pregunta para reflejar la intención. Desea un proveedor de OAuth ... –

+2

Estaba * SOLO * a punto de ponerlo en contacto con Scribe (https://github.com/fernandezpablo85/scribe-java) cuando noté que usted es el autor. ¿Terminaste escribiendo la biblioteca tú mismo? ;-) –

Respuesta

1

Hay una OAuth plugin para la Seguridad primavera

+0

No uso Spring en mi proyecto, excepto Guice. –

12

Una biblioteca mencionado en http://oauth.net/code parece interesante (estoy excluyendo el OAuth for Spring Security y OAuth Signpost que no son lo que estás buscando):

Un Java library y examples fueron contribuido por John Kristian, Praveen Alavilli y Dirk Balfanz.

OAuth for Spring Security es también disponible, contribuido por Ryan Heaton. Este proyecto no está alojado en el repositorio OAuth .

OAuth Signpost ofrece OAuth sencilla la firma de mensajes para Java y Apache HttpComponents (Google Android listo!). Contribuido por Matthias Kaeppler.

He comprobado la Java library un poco más y creo que su proporcionando todo lo necesario para el lado del cliente y el código del lado del servidor. La siguiente blog post tiene en realidad un ejemplo completo y estoy pegando el código del servidor a continuación (JSP):

<%@ page import="net.oauth.server.*"%> 
<%@ page import="net.oauth.*"%> 

<% 
//Presumably this should actually be looked up for a given key. 
String consumerSecret="uynAeXiWTisflWX99KU1D2q5"; 

//Presumably the key is sent by the client. This is part of the URL, after all. 
String consumerKey="orkut.com:623061448914"; 

//Construct the message object. Use null for the URL and let the code construct it. 
OAuthMessage message=OAuthServlet.getMessage(request,null); 

//Construct an accessor and a consumer 
OAuthConsumer consumer=new OAuthConsumer(null, consumerKey, consumerSecret, null); 
OAuthAccessor accessor=new OAuthAccessor(consumer); 

//Now validate. Weirdly, validator has a void return type. It throws exceptions 
//if there are problems. 
SimpleOAuthValidator validator=new SimpleOAuthValidator(); 
validator.validateMessage(message,accessor); 

//Now what? Generate some JSON here for example. 
System.out.println("It must have worked"); %> 

Esto se ve cerca de lo que desea.

+3

Solo para aclarar: Pascal ha cruzado estas bibliotecas porque solo se usan para OAuth del lado del cliente. sin embargo, es una biblioteca OAuth del lado del servidor. – Matthias

+2

¿Alguna actualización de su respuesta para 2013 ?! :) –

+0

Al mirar la publicación del blog, parece estar omitiendo el secreto del token (por lo que la verificación de la firma no debería funcionar). Además, SimpleOAuthValidator en realidad nunca verifica los valores nonce, lo que significa que esta implementación es vulnerable a la repetición de ataques desde la puerta. Todavía podría ser útil como punto de partida, pero deberá crear a partir de él para que sea funcional y seguro. –

0

Parece que hay un repositorio de Subversion para una biblioteca en http://oauth.googlecode.com/svn/code/java/. Parece que tendrás que pagar y ejecutar Maven para obtener ejecutables.

Si usted entra en ejemplo/webapp/src/main/java que tienen algunos ejemplos de consumir de Twitter, Yahoo, otros &.

+2

Creo que esas son las librerías del cliente –

0

Jersey (la implementación de referencia de JAX-RS) es compatible con OAuth a través de una extensión de Jersey llamada OpenSSO Auth Filter. Sin embargo, esto requiere una instancia de servidor OpenSSO adicional. Ver this document for more information.

Tenga en cuenta que OpenSSO ha sido suspendido por Oracle y ahora es under ForgeRock as OpenAM.

+0

hey ... hendy ¿alguna vez has probado la biblioteca Scribe? Estoy un poco confundido sobre cómo lidiar con esa biblioteca ... ya que no tiene archivos javadoc allí. :( – gumuruh

+0

lo siento, no :) jeje –

4

Puede usar el Jersey OAuth Signature Library.

La autenticación simple de OAuth para un servlet o filtro puede configurarse utilizando un Filtro de contenedor, que filtra la solicitud antes de que la solicitud coincida y se envíe a una clase de recurso raíz.El Filtro de contenedores se registra utilizando parámetros de inicialización que apuntan a una clase definida por el usuario, tales como los siguientes:

public class OAuthAuthenticationFilter implements ContainerRequestFilter { 
    @Override 
    public ContainerRequest filter(ContainerRequest containerRequest) { 
     // Read the OAuth parameters from the request 
     OAuthServerRequest request = new OAuthServerRequest(containerRequest); 
     OAuthParameters params = new OAuthParameters(); 
     params.readRequest(request); 

     // Set the secret(s), against which we will verify the request 
     OAuthSecrets secrets = new OAuthSecrets(); 
     // ... secret setting code ... 

     // Check that the timestamp has not expired 
     String timestampStr = params.getTimestamp(); 
     // ... timestamp checking code ... 

     // Verify the signature 
     try { 
      if(!OAuthSignature.verify(request, params, secrets)) { 
       throw new WebApplicationException(401); 
      } 
     } catch (OAuthSignatureException e) { 
      throw new WebApplicationException(e, 401); 
     } 

     // Return the request 
     return containerRequest; 
    } 
} 
+0

¿Dónde podemos encontrar una muestra de trabajo completo (con pruebas unitarias)? Gracias. –

30

Scribe es una biblioteca de OAuth para Java, escrito por el propio autor de la pregunta. ;-)

Nota: publico aquí como una respuesta para que otros usuarios de Google tengan una variedad de alternativas. Para otra alternativa basada en bibliotecas, vea mi otra respuesta "Biblioteca de firmas Jersey OAuth".

algo de código para ilustrar el uso:

OAuthService service = new ServiceBuilder() 
            .provider(TwitterApi.class) 
            .apiKey("your_api_key") 
            .apiSecret("your_api_secret") 
            .build(); 
... 
Token requestToken = service.getRequestToken(); 
String your_token = requestToken.getToken(); 
... 
Verifier verifier = new Verifier("your_previously_retrieved_verifier"); 
Token accessToken = service.getAccessToken(requestToken, verifier); 

Creación de la solicitud:

OAuthRequest request = OAuthRequest(Verb.GET, "http://api.twitter.com/1/direct_messages.json"); 
service.signRequest(accessToken, request); 
Response response = request.send(); 
+0

¡guau! buen trabajo @Hendy – Dejell

+0

Gracias por la información. Pero tenga en cuenta que este fragmento de código no funciona para Android 4 y más. Parece que Android 4 necesita tareas asincrónicas. – trante