Útmutató a ScribeJava-hoz

1. Bemutatkozás

Ebben az oktatóanyagban megnézzük a ScribeJava könyvtárat.

A ScribeJava egy egyszerű OAuth-kliens a Java számára, amely segít az OAuth-folyamat kezelésében.

A könyvtár fő jellemzője, hogy az összes főbb 1.0 és 2.0 OAuth API-t már eleve támogatja. Sőt, ha olyan API-val kell dolgoznunk, amelyet nem támogatunk, a könyvtár néhány osztályt biztosít az OAuth API -ink megvalósításához.

Egy másik fontos jellemző, hogy kiválasztható, hogy melyik ügyfél használja. A ScribeJava valóban számos HTTP klienst támogat:

  • Async Http kliens
  • OkHttp
  • Apache HttpComponents HttpClient

Ezenkívül a könyvtár szálbiztos és Java7-kompatibilis, így régi környezetben is használhatjuk.

2. Függőségek

A ScribeJava központi és API modulokba szerveződik, ez utóbbi tartalmaz egy sor külső API-t (Google, GitHub, Twitter stb.) és az alapvető műtárgyat:

 com.github.scribejava scribejava-apis legújabb verzió 

Abban az esetben, ha csak alapvető osztályokra van szükségünk külső API nélkül, akkor csak a központi modult kell meghúznunk:

 com.github.scribejava scribejava-core legújabb verzió 

A legújabb verziók megtalálhatók a Maven tárházban.

3. OAuthService

A könyvtár fő része az absztrakt osztály OAuthService amely tartalmazza az OAuth „kézfogásának” helyes kezeléséhez szükséges összes paramétert.

A protokoll verziójától függően használjuk Oauth10Service vagy Oauth20Service konkrét osztályok az OAuth 1.0 és az OAuth 2.0 esetében.

A OAuthService megvalósítások, a könyvtár biztosítja a ServiceBuilder:

OAuthService service = new ServiceBuilder ("api_key") .apiSecret ("api_secret") .scope ("hatókör") .callback ("visszahívás") .build (GoogleApi20.instance ());

Be kellene állítanunk a api_key és a api_secret az engedélyezési szerver által biztosított tokenek.

Beállíthatjuk a hatálya a kérelem és a visszahív ahová az engedélyezési szervernek át kell irányítania a felhasználót az engedélyezési folyamat végén.

Vegye figyelembe, hogy a protokoll verziójától függően nem minden paraméter kötelező.

Végül fel kell építenünk a OAuthService hívja a épít() metódus és átadja a használni kívánt API-k egy példányát. A ScribeJava GitHub webhelyen megtalálható a támogatott API-k teljes listája.

3.1. HTTP kliens

Ráadásul, a könyvtár lehetővé teszi számunkra, hogy kiválasszuk, melyik HTTP klienst használjuk:

ServiceBuilder builder = new ServiceBuilder ("api_key") .httpClient (új OkHttpHttpClient ());

Természetesen miután felvettük a szükséges függőségeket, az előző példához:

 com.github.scribejava scribejava-httpclient-okhttp legújabb verzió 

A legújabb verziók megtalálhatók a Maven tárházban.

3.2. Hibakeresési mód

Továbbá, van egy hibakeresési mód, amellyel segíthetünk a hibaelhárításban:

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

Egyszerűen hívnunk kell hibakeresés () módszer. A hibakeresés kimenetet küld System.out néhány releváns információ.

Továbbá, ha egy másik kimenetet akarunk használni, van egy másik módszer is, amely elfogadja az OutputStream a hibakeresési információkat a következő címre küldi:

FileOutputStream debugFile = új FileOutputStream ("hibakeresés"); ServiceBuilder builder = new ServiceBuilder ("api_key") .debug () .debugStream (debugFile);

4. OAuth 1.0 folyamat

Most összpontosítsunk arra, hogyan kezeljük az OAuth1 folyamatot.

Ebben a példában kapunk egy hozzáférési token a Twitter API-kkal, és ezt felhasználjuk kérelem benyújtására.

Először is fel kell építenünk a Oauth10Service, amint azt korábban láttuk, az építtető használatával:

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

Ha megvan a OAuth10Service, kaphatunk egy requestToken és használja az engedélyezési URL megszerzéséhez:

OAuth1RequestToken requestToken = service.getRequestToken (); Karakterlánc authUrl = service.getAuthorizationUrl (requestToken);

Ezen a ponton át kell irányítani a felhasználót authUrl és megszerezni a oauthVerifier az oldal biztosítja.

Ezért használjuk a oauthVerifier hogy megkapja a accessToken:

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

Végül létrehozhatunk egy kérést a OAuthRequest objektumot, és adja hozzá a tokent a signRequest () módszer:

OAuthRequest kérés = new OAuthRequest (Verb.GET, "//api.twitter.com/1.1/account/verify_credentials.json"); service.signRequest (accessToken, kérés); Válaszválasz = service.execute (kérés);

Ennek végrehajtása eredményeként kérés, kapunk egy Válasz tárgy.

5. OAuth 2.0 folyamat

Az OAuth 2.0 folyamat nem sokban különbözik az OAuth 1.0-tól. Ezen variációk magyarázata érdekében kapunk egy hozzáférési token a Google API-kkal.

Ugyanígy tettük az OAuth 1.0 folyamatban is, fel kell építenünk a OAuthService és megkapja a authUrl, de ezúttal egy OAuth20Service példa:

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

Vegye figyelembe, hogy ebben az esetben meg kell adnunk a hatálya a kérelem és a visszahív amelyhez az engedélyezési folyamat végén kapcsolatba lépünk.

Hasonlóképpen át kell irányítanunk a felhasználót authUrl és vegye a kód paraméter a visszahívás URL-jében:

OAuth2AccessToken accessToken = service.getAccessToken (kód); OAuthRequest kérelem = new OAuthRequest (Verb.GET, "//www.googleapis.com/oauth2/v1/userinfo?alt=json"); service.signRequest (accessToken, kérés); Válaszválasz = service.execute (kérés);

Végül annak érdekében, hogy a kérés, megkapjuk a accessToken val vel getAccessToken () módszer.

6. Egyéni API-k

Valószínűleg olyan API-val kell dolgoznunk, amelyet a ScribeJava nem támogat. Ilyen körülmények között a könyvtár lehetővé teszi számunkra a saját API-k megvalósítását.

Az egyetlen dolog, amit meg kell tennünk, a megvalósítás biztosítása DefaultApi10 vagy DefaultApi20 osztály.

Képzeljük el, hogy van egy OAuth 2.0 jogosultságkiszolgálónk, jelszó megadással. Ebben az esetben megvalósíthatjuk a DefaultApi20 hogy vegyünk egy hozzáférési token:

public class MyApi kiterjeszti DefaultApi20 {public MyApi () {} private static class instanceHolder {private static final MyApi INSTANCE = new MyApi (); } public static MyApi instance () {return instanceHolder.INSTANCE; } @Orride public String getAccessTokenEndpoint () {return "// localhost: 8080 / oauth / token"; } @Orride védett karakterlánc getAuthorizationBaseUrl () {return null; }}

Így hasonló módon kaphatunk hozzáférési jogkivonatot, mint korábban:

OAuth20Service service = new ServiceBuilder ("baeldung_api_key") .apiSecret ("baeldung_api_secret") .scope ("read write") .build (MyApi.instance ()); OAuth2AccessToken token = service.getAccessTokenPasswordGrant (felhasználónév, jelszó); OAuthRequest kérés = new OAuthRequest (Verb.GET, "// localhost: 8080 / me"); service.signRequest (token, request); Válaszválasz = service.execute (kérés);

7. Következtetés

Ebben a cikkben megnéztük a leghasznosabb osztályokat, amelyeket a ScribeJava nyújt a polcról.

Megtanultuk az OAuth 1.0 és OAuth 2.0 folyamatok kezelését külső API-kkal. Megtanultuk a könyvtár konfigurálását a saját API -ink használatához is.

Szokás szerint az ebben az oktatóanyagban bemutatott összes kódminta elérhető a GitHubon.