Guide til ScribeJava

1. Introduksjon

I denne opplæringen skal vi se på ScribeJava-biblioteket.

ScribeJava er en enkel OAuth-klient for Java som hjelper til med å administrere OAuth-flyten.

Hovedfunksjonen i biblioteket er at den støtter alle store 1.0 og 2.0 OAuth APIer utenom boksen. Videre, hvis vi må jobbe med en API som ikke støttes, gir biblioteket et par klasser for implementering av OAuths API-er.

En annen viktig funksjon er at det er mulig å velge hvilken klient som skal brukes. ScribeJava støtter faktisk flere HTTP-klienter:

  • Async Http-klient
  • OkHttp
  • Apache HttpKomponenter HttpClient

Videre er biblioteket trådsikkert og Java7-kompatibelt, slik at vi kan bruke det i eldre miljøer.

2. Avhengigheter

ScribeJava er organisert i en kjerne- og API-modul, sistnevnte inkluderer et sett med ekstern API (Google, GitHub, Twitter, etc) og kjerneartefakten:

 com.github.scribejava scribejava-apis siste versjon 

I tilfelle vi trenger bare kjerneklasser uten eksternt API, må vi bare trekke kjernemodulen:

 com.github.scribejava scribejava-core siste versjon 

De nyeste versjonene finner du på Maven repository.

3. OAuthService

Hoveddelen av biblioteket er den abstrakte klassen OAuthService som inneholder alle parametrene som trengs for å administrere OAuths 'håndtrykk' korrekt.

Avhengig av versjonen av protokollen, bruker vi den Oauth10Service eller Oauth20Service konkrete klasser for henholdsvis OAuth 1.0 og OAuth 2.0.

For å bygge OAuthService implementeringer, gir biblioteket en ServiceBuilder:

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

Vi bør stille inn api_key og api_secret tokens levert av autorisasjonsserveren.

Vi kan også stille inn omfang av forespørselen og Ring tilbake som autorisasjonsserveren skal omdirigere brukeren til på slutten av autorisasjonsflyten.

Merk at avhengig av versjonen av protokollen er ikke alle parametere obligatoriske.

Til slutt må vi bygge OAuthService ringer bygge() metode og sende den en forekomst av API-ene vi vil bruke. Vi finner en fullstendig liste over APIene som støttes på ScribeJava GitHub.

3.1. HTTP-klient

Videre biblioteket lar oss velge hvilken HTTP-klient vi skal bruke:

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

Etter, selvfølgelig, har vi tatt med de nødvendige avhengighetene, for forrige eksempel:

 com.github.scribejava scribejava-httpclient-okhttp siste versjon 

De nyeste versjonene finner du på Maven repository.

3.2. Feilsøkingsmodus

I tillegg, det er en feilsøkingsmodus vi kan bruke for å hjelpe oss med feilsøking:

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

Vi må rett og slett ringe feilsøke () metode. Feilsøking sendes til System.out litt relevant informasjon.

Også, hvis vi vil bruke en annen utgang, er det en annen metode som godtar en OutputStream å sende feilsøkingsinformasjonen til:

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

4. OAuth 1.0-strømning

La oss nå fokusere på hvordan du håndterer en OAuth1-strøm.

I dette eksemplet, vi skal få en tilgangstoken med Twitter API-er, og vi bruker den til å komme med en forespørsel.

Først og fremst må vi bygge Oauth10Service, som vi så tidligere, ved hjelp av byggherre:

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

Når vi har fått OAuth10Service, vi kan få en requestToken og bruk den for å få autorisasjons-URL:

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

På dette tidspunktet er det nødvendig å omdirigere brukeren til godkjenning og for å få oauthVerifier levert av siden.

Derfor bruker vi oauthVerifier å få accessToken:

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

Til slutt kan vi lage en forespørsel ved hjelp av OAuthRequest objekt og legg symbolet til det med signRequest () metode:

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

Som et resultat av gjennomføringen av det be om, vi får en Respons gjenstand.

5. OAuth 2.0-strømning

OAuth 2.0-flyten er ikke mye forskjellig fra OAuth 1.0. For å forklare disse variasjonene, vi skal få en tilgangstoken med Google API-er.

På samme måte gjorde vi i OAuth 1.0-strømmen, vi må bygge OAuthService og få godkjenning, men denne gangen bruker vi en OAuth20Service forekomst:

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

Merk at vi i dette tilfellet må oppgi omfang av forespørselen og Ring tilbake som vi blir kontaktet til på slutten av autorisasjonsflyten.

På samme måte må vi omdirigere brukeren til godkjenning og ta kode parameter i url til tilbakeringing:

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

Til slutt, for å gjøre be om, vi får accessToken med getAccessToken () metode.

6. Tilpassede APIer

Vi må sannsynligvis jobbe med et API som ikke støttes av ScribeJava. Under disse omstendighetene, biblioteket lar oss implementere våre egne APIer.

Det eneste vi trenger å gjøre er å gi en implementering av StandardApi10 eller StandardApi20 klasse.

La oss forestille oss at vi har en OAuth 2.0 autorisasjonsserver med passordtilskudd. I dette tilfellet kan vi implementere StandardApi20 slik at vi kan ta en tilgangstoken:

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

Dermed kan vi få et tilgangstoken på en lignende måte som vi gjorde før:

OAuth20Service service = new ServiceBuilder ("baeldung_api_key") .apiSecret ("baeldung_api_secret") .scope ("read write") .build (MyApi.instance ()); OAuth2AccessToken token = service.getAccessTokenPasswordGrant (brukernavn, passord); OAuthRequest-forespørsel = ny OAuthRequest (Verb.GET, "// localhost: 8080 / me"); service.signRequest (token, forespørsel); Svarrespons = service.execute (forespørsel);

7. Konklusjon

I denne artikkelen tok vi en titt på de mest nyttige klassene som ScribeJava tilbyr fra hyllen.

Vi lærte å håndtere OAuth 1.0 og OAuth 2.0-strømmer med eksterne API-er. Vi lærte også hvordan vi konfigurerer biblioteket for å kunne bruke våre egne APIer.

Som vanlig er alle kodeeksempler vist i denne opplæringen tilgjengelig på GitHub.


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