Ръководство за ScribeJava

1. Въведение

В този урок ще разгледаме библиотеката на ScribeJava.

ScribeJava е прост OAuth клиент за Java, който помага за управлението на потока OAuth.

Основната характеристика на библиотеката е, че тя поддържа всички основни API за 1.0 и 2.0 OAuth готови. Освен това, ако трябва да работим с API, който не се поддържа, библиотеката предоставя няколко класа за внедряване на API на нашия OAuth.

Друга важна характеристика е, че е възможно да изберете кой клиент да използва. Всъщност ScribeJava поддържа няколко HTTP клиента:

  • Async Http клиент
  • Добре
  • Apache HttpComponents HttpClient

Освен това библиотеката е безопасна за нишки и съвместима с Java7, така че можем да я използваме в наследствени среди.

2. Зависимости

ScribeJava е организиран в модул за ядро ​​и API , последният включва набор от външни API (Google, GitHub, Twitter и т.н.) и основния артефакт:

 com.github.scribejava scribejava-apis latest-version 

В случай, че ни трябват само основни класове без външен API, трябва да изтеглим само основния модул:

 com.github.scribejava scribejava-core latest-version 

Най-новите версии могат да бъдат намерени в хранилището на Maven.

3. OAuthService

Основната част от библиотеката е абстрактният клас OAuthService, който съдържа всички параметри, необходими за правилното управление на „ръкостискането“ на OAuth.

В зависимост от версията на протокола, ще използваме конкретни класове Oauth10Service или Oauth20Service съответно за OAuth 1.0 и OAuth 2.0.

За да се изградят внедряванията на OAuthService , библиотеката предоставя ServiceBuilder:

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

Трябва да зададем маркерите api_key и api_secret, предоставени от сървъра за оторизация.

Също така можем да зададем обхвата на заявката и обратното повикване, към които сървърът за оторизация да пренасочва потребителя в края на потока за оторизация.

Имайте предвид, че в зависимост от версията на протокола не всички параметри са задължителни.

И накрая, трябва да изградим OAuthService, извикващ метода build () и да му предаваме екземпляр на API- тата, които искаме да използваме. Можем да намерим пълен списък на API, поддържани в ScribeJava GitHub.

3.1. HTTP клиент

Освен това библиотеката ни позволява да изберем кой HTTP клиент да използва:

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

След като, разбира се, включихме необходимите зависимости, за предишния пример:

 com.github.scribejava scribejava-httpclient-okhttp latest-version 

Най-новите версии могат да бъдат намерени в хранилището на Maven.

3.2. Режим за отстраняване на грешки

Освен това има режим за отстраняване на грешки, който можем да използваме, за да ни помогне при отстраняване на неизправности:

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

Просто трябва да извикаме метода debug () . Отстраняването ще изведе на System.out някаква подходяща информация.

Също така, ако искаме да използваме различен изход, има друг метод, който приема OutputStream за изпращане на информация за отстраняване на грешки на:

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

4. OAuth 1.0 поток

Сега да се съсредоточим върху това как да се справим с поток OAuth1.

В този пример ще получим маркер за достъп с API на Twitter и ще го използваме за отправяне на заявка.

На първо място, трябва да изградим Oauth10Service , както видяхме по-рано, използвайки builder:

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

След като имаме OAuth10Service, можем да получим requestToken и да го използваме, за да получим URL адреса за упълномощаване:

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

На този етап е необходимо да пренасочите потребителя към authUrl и да получите oauthVerifier, предоставен от страницата.

Следователно използваме oauthVerifier, за да получим accessToken :

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

И накрая, можем да създадем заявка с помощта на обект OAuthRequest и да добавим маркера към нея с метода signRequest () :

OAuthRequest request = new OAuthRequest(Verb.GET, "//api.twitter.com/1.1/account/verify_credentials.json"); service.signRequest(accessToken, request); Response response = service.execute(request);

В резултат на изпълнението на тази заявка получаваме обект Response .

5. OAuth 2.0 поток

Потокът OAuth 2.0 не се различава много от OAuth 1.0. За да обясним тези вариации, ще получим маркер за достъп с API на Google.

По същия начин, както направихме в потока OAuth 1.0, трябва да изградим OAuthService и да получим authUrl , но този път ще използваме екземпляр OAuth20Service :

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

Имайте предвид, че в този случай трябва да предоставим обхвата на заявката и обратното обаждане, с които ще бъдем свързани в края на процеса на оторизация.

По същия начин трябва да пренасочим потребителя към authUrl и да вземем параметъра на кода в URL адреса на обратното повикване:

OAuth2AccessToken accessToken = service.getAccessToken(code); OAuthRequest request = new OAuthRequest(Verb.GET, "//www.googleapis.com/oauth2/v1/userinfo?alt=json"); service.signRequest(accessToken, request); Response response = service.execute(request);

В крайна сметка, за да направим заявката , получаваме метода accessToken с getAccessToken () .

6. Персонализирани API

Вероятно ще трябва да работим с API, който не се поддържа от ScribeJava. При тези обстоятелства библиотеката ни позволява да внедрим наши собствени API .

Единственото нещо, което трябва да направим, е да осигурим изпълнение на клас DefaultApi10 или DefaultApi20 .

Нека си представим, че имаме OAuth 2.0 сървър за оторизация с предоставяне на парола. В този случай можем да приложим DefaultApi20, за да можем да вземем маркер за достъп :

public class MyApi extends DefaultApi20 { public MyApi() {} private static class InstanceHolder { private static final MyApi INSTANCE = new MyApi(); } public static MyApi instance() { return InstanceHolder.INSTANCE; } @Override public String getAccessTokenEndpoint() { return "//localhost:8080/oauth/token"; } @Override protected String getAuthorizationBaseUrl() { return null; } }

По този начин можем да получим токен за достъп по подобен начин, както преди:

OAuth20Service service = new ServiceBuilder("baeldung_api_key") .apiSecret("baeldung_api_secret") .scope("read write") .build(MyApi.instance()); OAuth2AccessToken token = service.getAccessTokenPasswordGrant(username, password); OAuthRequest request = new OAuthRequest(Verb.GET, "//localhost:8080/me"); service.signRequest(token, request); Response response = service.execute(request);

7. Заключение

В тази статия разгледахме най-полезните класове, които ScribeJava предоставя от рафта.

Научихме как да се справяме с потоци OAuth 1.0 и OAuth 2.0 с външни API. Също така научихме как да конфигурираме библиотеката, за да използваме нашите собствени API.

Както обикновено, всички примерни кодове, показани в този урок, са достъпни в GitHub.