Vodič za ScribeJavu

1. Uvod

U ovom uputstvu ćemo pogledati biblioteku ScribeJava.

ScribeJava je jednostavan OAuth klijent za Javu koji pomaže u upravljanju protokom OAuth.

Glavna značajka knjižnice je da podržava sve glavne 1.0 i 2.0 OAuth API-je izravno. Štoviše, ako ćemo morati raditi s API-jem koji nije podržan, knjižnica nudi nekoliko klasa za implementaciju naših OAuth-ovih API-ja.

Druga važna značajka je mogućnost odabira klijenta koji će ga koristiti. Zapravo, ScribeJava podržava nekoliko HTTP klijenata:

  • Async Http klijent
  • OkHttp
  • Apache HttpComponents HttpClient

Nadalje, knjižnica je zaštićena nitima i kompatibilna s Java7, tako da je možemo koristiti u naslijeđenim okruženjima.

2. Ovisnosti

ScribeJava organiziran je u jezgru i API modul, potonji uključuje skup vanjskih API-ja (Google, GitHub, Twitter, itd.) i temeljni artefakt:

 com.github.scribejava scribejava-apis najnovija verzija 

U slučaju da su nam potrebne samo osnovne klase bez ikakvog vanjskog API-ja, moramo povući samo osnovni modul:

 com.github.scribejava scribejava-core najnovija verzija 

Najnovije verzije možete pronaći na Maven repozitorijumu.

3. OAuthService

Glavni dio knjižnice je sažetak OAuthService koja sadrži sve parametre potrebne za pravilno upravljanje OAuthovim 'stiskom ruke'.

Koristit ćemo ovisno o verziji protokola Oauth10Service ili Oauth20Service konkretne klase za OAuth 1.0 i OAuth 2.0.

Da bi se izgradio OAuthService implementacije, knjižnica pruža a Uslužni graditelj:

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

Trebali bismo postaviti api_key i api_secret tokene koje pruža autorizacijski poslužitelj.

Također, možemo postaviti opseg zahtjeva i uzvratiti poziv na koji bi autorizacijski poslužitelj trebao preusmjeriti korisnika na kraju tijeka autorizacije.

Imajte na umu da ovisno o verziji protokola nisu svi parametri obvezni.

Napokon, moramo izgraditi OAuthService pozivajući izgraditi() metodu i prosljeđuje joj instancu API-ja koje želimo koristiti. Cjelovit popis API-ja možemo pronaći na ScribeJava GitHub.

3.1. HTTP klijent

Štoviše, knjižnica nam omogućuje da odaberemo HTTP klijenta koji ćemo koristiti:

Graditelj ServiceBuilder = novi ServiceBuilder ("api_key") .httpClient (novi OkHttpHttpClient ());

Nakon što smo, naravno, uključili potrebne ovisnosti, za prethodni primjer:

 com.github.scribejava scribejava-httpclient-okhttp najnovija verzija 

Najnovije verzije možete pronaći na Maven repozitorijumu.

3.2. Način za uklanjanje pogrešaka

U Dodatku, postoji način otklanjanja pogrešaka koji nam može poslužiti za rješavanje problema:

Builder ServiceBuilder = novi ServiceBuilder ("api_key") .debug ();

Jednostavno moramo nazvati otklanjanje pogrešaka () metoda. Otklanjanje pogrešaka izlazit će u System.out neke relevantne informacije.

Također, ako želimo koristiti drugačiji izlaz, postoji još jedna metoda koja prihvaća Izlazni tok za slanje podataka o otklanjanju pogrešaka na:

FileOutputStream debugFile = novi FileOutputStream ("otklanjanje pogrešaka"); Graditelj ServiceBuilder = novi ServiceBuilder ("api_key") .debug () .debugStream (debugFile);

4. OAuth 1.0 protok

Sada se usredotočimo na to kako upravljati protokom OAuth1.

U ovom primjeru, dobit ćemo pristupni token s Twitter API-ima i koristit ćemo ga za postavljanje zahtjeva.

Prije svega, moramo izgraditi Oauth10Service, kao što smo vidjeli ranije, koristeći builder:

Usluga OAuth10aService = novi ServiceBuilder ("api_key") .apiSecret ("api_secret") .build (TwitterApi.instance ());

Jednom kad imamo OAuth10Service, možemo dobiti a requestToken i upotrijebite ga za dobivanje autorizacijskog URL-a:

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

U ovom trenutku potrebno je preusmjeriti korisnika na authUrl i da biste dobili oauthVerifier koju pruža stranica.

Stoga koristimo oauthVerifier da biste dobili accessToken:

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

Napokon, možemo stvoriti zahtjev pomoću OAuthRequest objekt i dodajte mu žeton s signRequest () metoda:

Zahtjev za OAuthRequest = novi OAuthRequest (Verb.GET, "//api.twitter.com/1.1/account/verify_credentials.json"); service.signRequest (accessToken, zahtjev); Odgovor odgovora = service.execute (zahtjev);

Kao rezultat izvršenja toga zahtjev, dobivamo a Odgovor objekt.

5. OAuth 2.0 protok

Protok OAuth 2.0 ne razlikuje se puno od OAuth 1.0. Da bi objasnili ove varijacije, dobit ćemo pristupni token s Google API-ima.

Na isti način, kao što smo učinili u protoku OAuth 1.0, moramo izgraditi i OAuthService i dobiti authUrl, ali ovaj put koristit ćemo OAuth20Service primjer:

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

Imajte na umu da u ovom slučaju moramo pružiti opseg zahtjeva i uzvratiti poziv s kojim ćemo biti kontaktirani na kraju postupka autorizacije.

Isto tako, korisnika moramo preusmjeriti na authUrl i uzmi kodirati parametar u URL-u povratnog poziva:

OAuth2AccessToken accessToken = service.getAccessToken (kod); Zahtjev za OAuthRequest = novi OAuthRequest (Verb.GET, "//www.googleapis.com/oauth2/v1/userinfo?alt=json"); service.signRequest (accessToken, zahtjev); Odgovor odgovora = service.execute (zahtjev);

Na kraju, kako bi se zahtjev, dobivamo accessToken s getAccessToken () metoda.

6. Prilagođeni API-ji

Vjerojatno ćemo morati raditi s API-jem koji ScribeJava ne podržava. U tim okolnostima, knjižnica nam omogućuje da implementiramo vlastite API-je.

Jedino što moramo učiniti je osigurati provedbu DefaultApi10 ili ZadaniApi20 razred.

Zamislimo da imamo OAuth 2.0 autorizacijski poslužitelj s dodijeljenom lozinkom. U ovom slučaju možemo implementirati ZadaniApi20 kako bismo mogli uzeti pristupni token:

javna klasa MyApi proširuje DefaultApi20 {public MyApi () {} privatna statička klasa InstanceHolder {privatna statička konačna MyApi INSTANCE = nova MyApi (); } javna statička instanca MyApi () {return InstanceHolder.INSTANCE; } @Override javni niz getAccessTokenEndpoint () {return "// localhost: 8080 / oauth / token"; } @Override zaštićeni niz getAuthorizationBaseUrl () {return null; }}

Dakle, pristupni token možemo dobiti na sličan način kao i prije:

Usluga OAuth20Service = novi ServiceBuilder ("baeldung_api_key") .apiSecret ("baeldung_api_secret") .scope ("read write") .build (MyApi.instance ()); OAuth2AccessToken token = service.getAccessTokenPasswordGrant (korisničko ime, lozinka); Zahtjev za OAuthRequest = novi OAuthRequest (Verb.GET, "// localhost: 8080 / me"); service.signRequest (token, zahtjev); Odgovor odgovora = service.execute (zahtjev);

7. Zaključak

U ovom smo članku pogledali najkorisnije razrede koje ScribeJava nudi s police.

Naučili smo kako rukovati protokovima OAuth 1.0 i OAuth 2.0 s vanjskim API-jevima. Također smo naučili kako konfigurirati knjižnicu kako bismo koristili vlastite API-je.

Kao i obično, svi uzorci koda prikazani u ovom vodiču dostupni su na GitHubu.


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