Ú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.