Gids voor ScribeJava

1. Inleiding

In deze tutorial gaan we kijken naar de ScribeJava-bibliotheek.

ScribeJava is een eenvoudige OAuth-client voor Java die helpt bij het beheren van de OAuth-stroom.

Het belangrijkste kenmerk van de bibliotheek is dat deze alle belangrijke 1.0 en 2.0 OAuth API's out-of-the-box ondersteunt. Bovendien, als we moeten werken met een API die niet wordt ondersteund, biedt de bibliotheek een aantal klassen voor het implementeren van onze OAuth-API's.

Een ander belangrijk kenmerk is dat het mogelijk is om te kiezen welke cliënt gebruikt. ScribeJava ondersteunt inderdaad verschillende HTTP-clients:

  • Async Http-client
  • OkHttp
  • Apache HttpComponents HttpClient

Bovendien is de bibliotheek thread-safe en Java7-compatibel, zodat we deze in legacy-omgevingen kunnen gebruiken.

2. Afhankelijkheden

ScribeJava is georganiseerd in een kern- en API-module, de laatste bevat een set externe API (Google, GitHub, Twitter, enz.) en het kernartefact:

 com.github.scribejava scribejava-apis laatste-versie 

Als we alleen kernklassen nodig hebben zonder enige externe API, moeten we alleen de kernmodule gebruiken:

 com.github.scribejava scribejava-core laatste-versie 

De nieuwste versies zijn te vinden op de Maven-repository.

3. OAuthService

Het grootste deel van de bibliotheek is de abstracte klasse OAuthService die alle parameters bevat die nodig zijn om de ‘handshake 'van de OAuth correct te beheren.

Afhankelijk van de versie van het protocol gebruiken we Oauth10Service of Oauth20Service concrete klassen voor respectievelijk OAuth 1.0 en OAuth 2.0.

Om het OAuthService implementaties, biedt de bibliotheek een ServiceBuilder:

OAuthService-service = nieuwe ServiceBuilder ("api_key") .apiSecret ("api_secret") .scope ("scope") .callback ("callback") .build (GoogleApi20.instance ());

We moeten de API sleutel en de api_secret tokens verstrekt door de autorisatieserver.

We kunnen ook de reikwijdte van het verzoek en de Bel terug waarnaar de autorisatieserver de gebruiker moet omleiden aan het einde van de autorisatiestroom.

Merk op dat, afhankelijk van de versie van het protocol, niet alle parameters verplicht zijn.

Ten slotte moeten we het OAuthService bellen met de bouwen() methode en het doorgeven van een instantie van de API's die we willen gebruiken. We kunnen een volledige lijst vinden van de API's die worden ondersteund op ScribeJava GitHub.

3.1. HTTP-client

Bovendien, de bibliotheek stelt ons in staat om te kiezen welke HTTP-client te gebruiken:

ServiceBuilder builder = nieuwe ServiceBuilder ("api_key") .httpClient (nieuwe OkHttpHttpClient ());

Nadat we natuurlijk de vereiste afhankelijkheden hebben opgenomen, voor het vorige voorbeeld:

 com.github.scribejava scribejava-httpclient-okhttp laatste-versie 

De nieuwste versies zijn te vinden op de Maven-repository.

3.2. Foutopsporingsmodus

Daarnaast, er is een foutopsporingsmodus die we kunnen gebruiken om ons te helpen bij het oplossen van problemen:

ServiceBuilder builder = nieuwe ServiceBuilder ("api_key") .debug ();

We moeten gewoon bellen debug () methode. Debug wordt uitgevoerd naar System.out enige relevante informatie.

Als we een andere uitvoer willen gebruiken, is er ook een andere methode die een OutputStream om de foutopsporingsinformatie te verzenden naar:

FileOutputStream debugFile = nieuwe FileOutputStream ("debug"); ServiceBuilder builder = nieuwe ServiceBuilder ("api_key") .debug () .debugStream (debugFile);

4. OAuth 1.0-stroom

Laten we ons nu concentreren op het afhandelen van een OAuth1-stroom.

In dit voorbeeld we gaan een toegangstoken met de Twitter API's en we zullen deze gebruiken om een ​​verzoek in te dienen.

Allereerst moeten we het Oauth10Service, zoals we eerder zagen, met behulp van builder:

OAuth10aService-service = nieuwe ServiceBuilder ("api_key") .apiSecret ("api_secret") .build (TwitterApi.instance ());

Zodra we de OAuth10Service, we kunnen een requestToken en gebruik het om de autorisatie-URL op te halen:

OAuth1RequestToken requestToken = service.getRequestToken (); String authUrl = service.getAuthorizationUrl (requestToken);

Op dit punt is het nodig om de gebruiker om te leiden naar authUrl en om het oauthVerifier verstrekt door de pagina.

Daarom gebruiken we de oauthVerifier om het toegangstoken:

OAuth1AccessToken accessToken = service.getAccessToken (requestToken, oauthVerifier);

Ten slotte kunnen we een verzoek maken met OAuthRequest object en voeg het token eraan toe met signRequest () methode:

OAuthRequest request = nieuw OAuthRequest (Verb.GET, "//api.twitter.com/1.1/account/verify_credentials.json"); service.signRequest (accessToken, verzoek); Antwoordantwoord = service.execute (verzoek);

Als resultaat van de uitvoering daarvan verzoek, we krijgen een Reactie voorwerp.

5. OAuth 2.0-stroom

De OAuth 2.0-stroom verschilt niet veel van OAuth 1.0. Om deze variaties te verklaren, we gaan een toegangstoken met Google API's.

Op dezelfde manier als we deden in de OAuth 1.0-stroom, moeten we het OAuthService en verkrijg het authUrl, maar deze keer gebruiken we een OAuth20Service voorbeeld:

OAuth20Service-service = nieuwe ServiceBuilder ("api_key") .apiSecret ("api_secret") .scope ("// www.googleapis.com/auth/userinfo.email") .callback ("// localhost: 8080 / auth"). build (GoogleApi20.instance ()); String authUrl = service.getAuthorizationUrl ();

Houd er rekening mee dat we in dit geval de reikwijdte van het verzoek en de Bel terug waarnaar we worden gecontacteerd aan het einde van de autorisatiestroom.

Evenzo moeten we de gebruiker omleiden naar authUrl en neem de code parameter in de url van de callback:

OAuth2AccessToken accessToken = service.getAccessToken (code); OAuthRequest-verzoek = nieuw OAuthRequest (Verb.GET, "//www.googleapis.com/oauth2/v1/userinfo?alt=json"); service.signRequest (accessToken, verzoek); Antwoordantwoord = service.execute (verzoek);

Uiteindelijk, om de verzoek, we krijgen de toegangstoken met getAccessToken () methode.

6. Aangepaste API's

We zullen waarschijnlijk moeten werken met een API die niet wordt ondersteund door ScribeJava. Onder die omstandigheden de bibliotheek stelt ons in staat om onze eigen API's te implementeren.

Het enige dat we hoeven te doen is zorgen voor een implementatie van StandaardApi10 of StandaardApi20 klasse.

Laten we ons voorstellen dat we een OAuth 2.0-autorisatieserver hebben met wachtwoordtoekenning. In dit geval kunnen we het StandaardApi20 zodat we een toegangstoken:

openbare klasse MyApi breidt DefaultApi20 uit {openbare MyApi () {} privé statische klasse InstanceHolder {privé statische laatste MyApi INSTANCE = nieuwe MyApi (); } openbare statische MyApi-instantie () {terug InstanceHolder.INSTANCE; } @Override public String getAccessTokenEndpoint () {return "// localhost: 8080 / oauth / token"; } @Override beschermde String getAuthorizationBaseUrl () {return null; }}

We kunnen dus een toegangstoken krijgen op een vergelijkbare manier als voorheen:

OAuth20Service service = nieuwe ServiceBuilder ("baeldung_api_key") .apiSecret ("baeldung_api_secret") .scope ("lezen schrijven") .build (MyApi.instance ()); OAuth2AccessToken-token = service.getAccessTokenPasswordGrant (gebruikersnaam, wachtwoord); OAuthRequest-verzoek = nieuwe OAuthRequest (Verb.GET, "// localhost: 8080 / me"); service.signRequest (token, verzoek); Antwoordantwoord = service.execute (verzoek);

7. Conclusie

In dit artikel hebben we de handigste klassen bekeken die ScribeJava standaard aanbiedt.

We hebben geleerd hoe we OAuth 1.0- en OAuth 2.0-stromen kunnen afhandelen met externe API's. We hebben ook geleerd hoe we de bibliotheek moeten configureren om onze eigen API's te gebruiken.

Zoals gewoonlijk zijn alle codevoorbeelden die in deze tutorial worden getoond, beschikbaar op GitHub.