web-dev-qa-db-fra.com

Bibliothèque pour OAuth Provider (Java)

Je recherche une bibliothèque Java Java qui m'aide à créer un fournisseur OAuth. Je dois pouvoir recevoir OAuth les demandes signées et déterminer si elles sont valides ou non (vérification des valeurs de signature, d'horodatage et de nonce).

Savez-vous s'il existe quelque chose qui facilite cette tâche?

55
Pablo Fernandez

Scribe est une bibliothèque OAuth pour Java, écrite par le demandeur lui-même.; - )

Remarque: je poste ceci ici comme réponse afin que les autres googleurs aient le choix entre des alternatives. Pour une autre alternative basée sur la bibliothèque, voir mon autre réponse "Jersey OAuth bibliothèque de signatures".

Un code pour illustrer l'utilisation:

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

Création de la demande:

OAuthRequest request = OAuthRequest(Verb.GET, "http://api.Twitter.com/1/direct_messages.json");
service.signRequest(accessToken, request);
Response response = request.send();
31
Hendy Irawan

Une bibliothèque mentionnée sur http://oauth.net/code semble intéressante (j'exclus les OAuth pour Spring Security et OAuth Signpost qui ne sont pas ce que vous cherchez):

A bibliothèque Java et exemples ont été fournis par John Kristian, Praveen Alavilli et Dirk Balfanz.

OAuth pour Spring Security est également disponible, contribution de Ryan Heaton. Ce projet n'est pas hébergé dans le référentiel OAuth.

OAuth Signpost offre une simple OAuth signature de message pour Java et Apache HttpComponents (Google Android ready) !). Contribution de Matthias Kaeppler.

J'ai vérifié la bibliothèque Java un peu plus loin et je pense qu'elle fournit tout le nécessaire pour le code côté client et côté serveur. Ce qui suit article de blog a en fait un exemple complet et je colle le code serveur ci-dessous (un 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"); %> 

Cela ressemble à ce que vous voulez.

12
Pascal Thivent

Vous pouvez utiliser la Jersey OAuth Signature Library.

L'authentification simple OAuth pour un servlet ou un filtre peut être configurée à l'aide d'un filtre de conteneur, qui filtre la demande avant qu'elle ne soit mise en correspondance et envoyée à une classe de ressources racine. Le filtre de conteneur est enregistré à l'aide de l'initialisation paramètres qui pointent vers une classe définie par l'utilisateur, tels que les suivants:

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;
    }
}
4
Hendy Irawan

Il existe un plugin OAuth pour Spring Security

1
Kevin

Il semble qu'il y ait un dépôt Subversion pour une bibliothèque sur http://oauth.googlecode.com/svn/code/Java/ . On dirait que vous devrez vérifier et exécuter maven pour obtenir des exécutables.

Si vous allez dans l'exemple/webapp/src/main/Java, ils ont quelques exemples de consommation de Twitter, Yahoo et autres.

0
Jason Gritman

Jersey (l'implémentation de référence de JAX-RS) prend en charge OAuth via une extension Jersey appelée OpenSSO Auth Filter. Cependant, cela nécessite une instance de serveur OpenSSO supplémentaire. Voir ce document pour plus d'informations .

Notez qu'OpenSSO a été abandonné par Oracle et est maintenant sous ForgeRock en tant qu'OpenAM .

0
Hendy Irawan