Guide til ScribeJava

1. Introduktion

I denne vejledning skal vi se på ScribeJava-biblioteket.

ScribeJava er en simpel OAuth-klient til Java, som hjælper med at styre OAuth-flowet.

Hovedfunktionen i biblioteket er, at det understøtter alle større 1.0 og 2.0 OAuth API'er uden for kassen. Desuden, hvis vi bliver nødt til at arbejde med en API, der ikke understøttes, giver biblioteket et par klasser til implementering af vores OAuths API'er.

En anden vigtig funktion er, at det er muligt at vælge, hvilken klient der skal bruges. ScribeJava understøtter faktisk flere HTTP-klienter:

  • Async Http-klient
  • OkHttp
  • Apache HttpKomponenter HttpClient

Desuden er biblioteket trådsikkert og Java7-kompatibelt, så vi kan bruge det i ældre miljøer.

2. Afhængigheder

ScribeJava er organiseret i et kerne- og API-modul, sidstnævnte inkluderer et sæt ekstern API (Google, GitHub, Twitter osv.) og kerneartefakten:

 com.github.scribejava scribejava-apis seneste version 

Hvis vi kun har brug for kerneklasser uden nogen ekstern API, skal vi bare trække kernemodulet:

 com.github.scribejava scribejava-core seneste version 

De nyeste versioner findes i Maven repository.

3. OAuthService

Hoveddelen af ​​biblioteket er den abstrakte klasse OAuthService som indeholder alle de parametre, der er nødvendige for korrekt styring af OAuths 'håndtryk'.

Afhængigt af versionen af ​​protokollen bruger vi Oauth10Service eller Oauth20Service konkrete klasser for henholdsvis OAuth 1.0 og OAuth 2.0.

For at opbygge OAuthService implementeringer giver biblioteket en ServiceBuilder:

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

Vi skal indstille api_key og api_secret tokens leveret af autorisationsserveren.

Vi kan også indstille rækkevidde af anmodningen og ring tilbage til hvilken autorisationsserveren skal omdirigere brugeren i slutningen af ​​autorisationsstrømmen.

Bemærk, at ikke alle parametre er obligatoriske, afhængigt af versionen af ​​protokollen.

Endelig er vi nødt til at bygge OAuthService ringer til bygge () metode og sende den en forekomst af de API'er, vi vil bruge. Vi kan finde en komplet liste over de API'er, der understøttes på ScribeJava GitHub.

3.1. HTTP-klient

I øvrigt, biblioteket giver os mulighed for at vælge, hvilken HTTP-klient vi skal bruge:

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

Efter selvfølgelig har vi inkluderet de krævede afhængigheder til det foregående eksempel:

 com.github.scribejava scribejava-httpclient-okhttp seneste version 

De nyeste versioner kan findes i Maven repository.

3.2. Fejlretningstilstand

Ud over, der er en fejlretningstilstand, vi kan bruge til at hjælpe os med fejlfinding:

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

Vi er simpelthen nødt til at ringe fejlfinde() metode. Fejlfinding sendes til System.out nogle relevante oplysninger.

Også, hvis vi vil bruge en anden output, er der en anden metode, der accepterer en OutputStream at sende fejlretningsoplysningerne til:

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

4. OAuth 1.0 Flow

Lad os nu fokusere på, hvordan man håndterer et OAuth1-flow.

I dette eksempel vi får en adgangstoken med Twitter API'erne, og vi bruger det til at fremsætte en anmodning.

Først og fremmest er vi nødt til at bygge Oauth10Service, som vi så tidligere, ved hjælp af builder:

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

Når vi har den OAuth10Service, vi kan få en requestToken og brug den til at få godkendelses-URL:

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

På dette tidspunkt er det nødvendigt at omdirigere brugeren til authUrl og for at få oauthVerifier leveret af siden.

Derfor bruger vi oauthVerifier at få adgangstoken:

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

Endelig kan vi oprette en anmodning ved hjælp af OAuthRequest objekt og tilføj symbolet til det med signRequest () metode:

OAuthRequest anmodning = ny OAuthRequest (Verb.GET, "//api.twitter.com/1.1/account/verify_credentials.json"); service.signRequest (accessToken, anmodning); Svarrespons = service.execute (anmodning);

Som et resultat af udførelsen af ​​det anmodning, vi får en Respons objekt.

5. OAuth 2.0-flow

OAuth 2.0-strømmen er ikke meget forskellig fra OAuth 1.0. For at forklare disse variationer, vi får en adgangstoken med Google API'er.

På samme måde gjorde vi i OAuth 1.0-strømmen, vi er nødt til at bygge OAuthService og få den authUrl, men denne gang bruger vi en OAuth20Service eksempel:

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

Bemærk, at vi i dette tilfælde skal levere rækkevidde af anmodningen og ring tilbage som vi bliver kontaktet til i slutningen af ​​godkendelsesstrømmen.

Ligeledes skal vi omdirigere brugeren til authUrl og tag kode parameter i url for tilbagekaldelsen:

OAuth2AccessToken accessToken = service.getAccessToken (kode); OAuthRequest anmodning = ny OAuthRequest (Verb.GET, "//www.googleapis.com/oauth2/v1/userinfo?alt=json"); service.signRequest (accessToken, anmodning); Svarrespons = service.execute (anmodning);

I sidste ende, for at gøre anmodning, vi får den adgangstoken med getAccessToken () metode.

6. Brugerdefinerede API'er

Vi bliver sandsynligvis nødt til at arbejde med en API, der ikke understøttes af ScribeJava. Under disse omstændigheder biblioteket giver os mulighed for at implementere vores egne API'er.

Det eneste, vi skal gøre, er at give en implementering af StandardApi10 eller StandardApi20 klasse.

Lad os forestille os, at vi har en OAuth 2.0-autorisationsserver med adgangskodetildeling. I dette tilfælde kan vi implementere StandardApi20 så vi kan tage en adgangstoken:

offentlig klasse MyApi udvider DefaultApi20 {offentlig MyApi () {} privat statisk klasse InstanceHolder {privat statisk endelig MyApi INSTANCE = ny MyApi (); } offentlig statisk MyApi-forekomst () {return InstanceHolder.INSTANCE; } @ Override public String getAccessTokenEndpoint () {return "// localhost: 8080 / oauth / token"; } @ Override beskyttet String getAuthorizationBaseUrl () {return null; }}

Således kan vi få et adgangstoken på en lignende måde som vi gjorde før:

OAuth20Service service = ny ServiceBuilder ("baeldung_api_key") .apiSecret ("baeldung_api_secret") .scope ("læs skriv") .build (MyApi.instance ()); OAuth2AccessToken token = service.getAccessTokenPasswordGrant (brugernavn, adgangskode); OAuthRequest anmodning = ny OAuthRequest (Verb.GET, "// localhost: 8080 / me"); service.signRequest (token, anmodning); Svarrespons = service.execute (anmodning);

7. Konklusion

I denne artikel kiggede vi på de mest nyttige klasser, som ScribeJava giver fra hylden.

Vi lærte at håndtere OAuth 1.0 og OAuth 2.0-strømme med eksterne API'er. Vi lærte også, hvordan vi konfigurerer biblioteket for at bruge vores egne API'er.

Som normalt er alle kodeeksempler vist i denne vejledning tilgængelige på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found