Sprievodca po ScribeJava

1. Úvod

V tomto tutoriále sa pozrieme na knižnicu ScribeJava.

ScribeJava je jednoduchý klient OAuth pre Java, ktorý pomáha spravovať tok OAuth.

Hlavnou vlastnosťou knižnice je, že podporuje všetky hlavné rozhrania API OAuth 1.0 a 2.0 pripravené na použitie. Navyše, ak budeme musieť pracovať s API, ktoré nie je podporované, knižnica poskytuje niekoľko tried pre implementáciu našich OAuth API.

Ďalšou dôležitou vlastnosťou je, že je možné zvoliť, ktorý klient použije. ScribeJava skutočne podporuje niekoľko klientov HTTP:

  • Async Http klient
  • OkHttp
  • Apache HttpComponents HttpClient

Knižnica je navyše bezpečná pre vlákna a kompatibilná s Java7, takže ju môžeme používať v starších prostrediach.

2. Závislosti

ScribeJava je organizovaná do jadra a modulu API, druhé obsahuje sadu externých rozhraní API (Google, GitHub, Twitter atď.) a hlavný artefakt:

 com.github.scribejava najnovšia verzia scribejava-apis 

V prípade, že potrebujeme iba základné triedy bez externého API, musíme vytiahnuť iba hlavný modul:

 com.github.scribejava najnovšia verzia scribejava-core 

Najnovšie verzie nájdete v úložisku Maven.

3. OAuthService

Hlavnou časťou knižnice je abstraktná trieda OAuthService ktorý obsahuje všetky parametre potrebné na správnu správu „podania ruky“ OAuth.

V závislosti od verzie protokolu použijeme Oauth10Service alebo Oauth20Service konkrétne triedy pre OAuth 1.0 a OAuth 2.0.

Za účelom vybudovania OAuthService implementácia, knižnica poskytuje a ServiceBuilder:

Služba OAuthService = nový ServiceBuilder ("api_key") .apiSecret ("api_secret") .scope ("scope") .callback ("callback") .build (GoogleApi20.instance ());

Mali by sme nastaviť api_key a api_secret tokeny poskytnuté autorizačným serverom.

Môžeme tiež nastaviť rozsah žiadosti a zavolaj späť na ktorý by mal autorizačný server presmerovať používateľa na konci procesu autorizácie.

Upozorňujeme, že v závislosti od verzie protokolu nie sú všetky parametre povinné.

Nakoniec musíme postaviť OAuthService volá build () metóda a jej odovzdanie inštancii API, ktoré chceme použiť. Celý zoznam podporovaných rozhraní API nájdete na serveri ScribeJava GitHub.

3.1. Klient HTTP

Navyše, knižnica nám umožňuje zvoliť si, ktorého HTTP klienta použijeme:

ServiceBuilder builder = nový ServiceBuilder ("api_key") .httpClient (nový OkHttpHttpClient ());

Potom sme samozrejme zahrnuli požadované závislosti pre predchádzajúci príklad:

 com.github.scribejava posledná verzia scribejava-httpclient-okhttp 

Najnovšie verzie nájdete v úložisku Maven.

3.2. Režim ladenia

Navyše, existuje režim ladenia, ktorý nám môže pomôcť pri riešení problémov:

ServiceBuilder builder = nový ServiceBuilder ("api_key") .debug ();

Musíme jednoducho zavolať ladiť () metóda. Ladenie sa zobrazí na System.out niektoré relevantné informácie.

Tiež, ak chceme použiť iný výstup, existuje iná metóda, ktorá akceptuje znak OutputStream poslať ladiace informácie na:

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

4. Tok OAuth 1,0

Teraz sa zamerajme na to, ako zvládnuť tok OAuth1.

V tomto príklade dostaneme prístupový token s rozhraním API pre Twitter a použijeme ho na odoslanie žiadosti.

Najskôr musíme postaviť Oauth10Service, ako sme videli skôr, pomocou nástroja na tvorbu súborov:

Služba OAuth10aService = nový ServiceBuilder ("api_key") .apiSecret ("api_secret") .build (TwitterApi.instance ());

Akonáhle máme OAuth10Service, môžeme získať requestToken a použite ju na získanie autorizačnej adresy URL:

OAuth1RequestToken requestToken = service.getRequestToken (); Reťazec authUrl = service.getAuthorizationUrl (requestToken);

V tomto okamihu je potrebné používateľa presmerovať na authUrl a získať oauthVerifier poskytuje stránka.

Preto používame oauthVerifier získať prístupový token:

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

Nakoniec môžeme vytvoriť požiadavku pomocou OAuthRequest objekt a pridajte k nemu token pomocou signRequest () metóda:

OAuthRequest request = new OAuthRequest (Verb.GET, "//api.twitter.com/1.1/account/verify_credentials.json"); service.signRequest (accessToken, požiadavka); Odozva odpoveď = service.execute (požiadavka);

V dôsledku vykonania uvedeného žiadosť, dostaneme a Odozva objekt.

5. Tok OAuth 2.0

Tok OAuth 2.0 sa príliš nelíši od OAuth 1.0. S cieľom vysvetliť tieto variácie, dostaneme prístupový token s Google API.

Rovnakým spôsobom, ako sme to robili v toku OAuth 1.0, musíme vybudovať OAuthService a získajte authUrl, ale tentoraz použijeme OAuth20Service inštancia:

Služba OAuth20Service = nový ServiceBuilder ("api_key") .apiSecret ("api_secret") .scope ("// www.googleapis.com/auth/userinfo.email") .callback ("// localhost: 8080 / auth"). build (GoogleApi20.instance ()); Reťazec authUrl = service.getAuthorizationUrl ();

Upozorňujeme, že v tomto prípade musíme poskytnúť rozsah žiadosti a zavolaj späť na ktorý budeme kontaktovaní na konci procesu autorizácie.

Rovnako musíme presmerovať používateľa na authUrl a vziať kód parameter v adrese URL spätného volania:

OAuth2AccessToken accessToken = service.getAccessToken (kód); OAuthRequest request = new OAuthRequest (Verb.GET, "//www.googleapis.com/oauth2/v1/userinfo?alt=json"); service.signRequest (accessToken, požiadavka); Odozva odpoveď = service.execute (požiadavka);

Nakoniec, aby sa žiadosť, dostaneme prístupový token s getAccessToken () metóda.

6. Vlastné API

Pravdepodobne budeme musieť pracovať s API, ktoré ScribeJava nepodporuje. Za týchto okolností knižnica nám umožňuje implementovať naše vlastné API.

Jediná vec, ktorú musíme urobiť, je zabezpečiť implementáciu PredvolenáApi10 alebo PredvolenáApi20 trieda.

Poďme si predstaviť, že máme autorizačný server OAuth 2.0 s pridelením hesla. V tomto prípade môžeme implementovať PredvolenáApi20 aby sme si mohli vziať prístupový token:

public class MyApi extends DefaultApi20 {public MyApi () {} private static class InstanceHolder {private static final MyApi INSTANCE = new MyApi (); } verejná statická inštancia MyApi () {návrat InstanceHolder.INSTANCE; } @Override public String getAccessTokenEndpoint () {return "// localhost: 8080 / oauth / token"; } @Override chránený reťazec getAuthorizationBaseUrl () {return null; }}

Môžeme teda získať prístupový token podobným spôsobom ako predtým:

OAuth20Service service = new ServiceBuilder ("baeldung_api_key") .apiSecret ("baeldung_api_secret") .scope ("read write") .build (MyApi.instance ()); Token OAuth2AccessToken = service.getAccessTokenPasswordGrant (používateľské meno, heslo); OAuthRequest request = new OAuthRequest (Verb.GET, "// localhost: 8080 / me"); service.signRequest (token, požiadavka); Odozva odpoveď = service.execute (požiadavka);

7. Záver

V tomto článku sme sa pozreli na najužitočnejšie triedy, ktoré ScribeJava poskytuje z police.

Naučili sme sa, ako zvládnuť toky OAuth 1.0 a OAuth 2.0 s externými API. Naučili sme sa tiež, ako nakonfigurovať knižnicu, aby sme mohli používať naše vlastné API.

Ako obvykle sú všetky ukážky kódu zobrazené v tomto tutoriále dostupné na GitHub.


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