מדריך ScribeJava

1. הקדמה

במדריך זה נבחן את ספריית ScribeJava.

ScribeJava הוא לקוח OAuth פשוט עבור Java המסייע בניהול זרימת OAuth.

המאפיין העיקרי של הספרייה הוא שהיא תומכת בכל ממשקי ה- API העיקריים 1.0 ו- 2.0 OAuth מחוץ לקופסה. יתר על כן, אם נצטרך לעבוד עם ממשק API שאינו נתמך, הספרייה מספקת כמה שיעורים ליישומי ה- API של OAuth שלנו.

תכונה חשובה נוספת היא שאפשר לבחור באיזה לקוח ישתמש. ואכן, ScribeJava תומך בכמה לקוחות HTTP:

  • לקוח Http של Async
  • OkHttp
  • Apache Http רכיבים HttpClient

יתר על כן, הספרייה בטוחה בחוטים ותואמת Java7, כך שנוכל להשתמש בה בסביבות מדור קודם.

2. תלות

ScribeJava מאורגן למודול ליבה וממשקי API, האחרון כולל מערכת API חיצונית (Google, GitHub, Twitter וכו ') וחפץ הליבה:

 com.github.scribejava scribejava-apis הגרסה האחרונה 

במקרה שאנחנו זקוקים לשיעורי ליבה בלבד ללא ממשק API חיצוני, עלינו למשוך רק את מודול הליבה:

 com.github.scribejava scribejava-core הגרסה האחרונה 

את הגרסאות האחרונות ניתן למצוא במאגר Maven.

3. OAuthService

החלק העיקרי של הספרייה הוא הכיתה המופשטת OAuthService המכיל את כל הפרמטרים הדרושים לניהול נכון של 'לחיצת היד' של OAuth.

בהתאם לגירסת הפרוטוקול, נשתמש Oauth10Service אוֹ Oauth20Service שיעורי בטון בהתאמה ל- OAuth 1.0 ו- OAuth 2.0.

על מנת לבנות את OAuthService יישומים, הספרייה מספקת א ServiceBuilder:

שירות OAuthService = ServiceBuilder חדש ("api_key") .apiSecret ("api_secret") .scope ("scope") .callback ("callback") .build (GoogleApi20.instance ());

עלינו להגדיר את api_key וה api_secret אסימונים המסופקים על ידי שרת ההרשאה.

כמו כן, אנו יכולים להגדיר את תְחוּם של הבקשה ושל התקשר חזרה שאליו שרת ההרשאות אמור להפנות את המשתמש בסוף זרימת ההרשאה.

שימו לב כי בהתאם לגרסת הפרוטוקול לא כל הפרמטרים הם חובה.

לבסוף, עלינו לבנות את OAuthService קורא ל לִבנוֹת() השיטה ולהעביר אותה מופע של ממשקי ה- API בהם אנו רוצים להשתמש. אנו יכולים למצוא רשימה מלאה של ממשקי ה- API הנתמכים ב- ScribeJava GitHub.

3.1. לקוח HTTP

יתר על כך, הספרייה מאפשרת לנו לבחור באיזה לקוח HTTP להשתמש:

בונה ServiceBuilder = ServiceBuilder חדש ("api_key") .httpClient (OkHttpHttpClient חדש ());

לאחר, כמובן, כללנו את התלות הנדרשת, לדוגמא הקודמת:

 com.github.scribejava scribejava-httpclient-okhttp הגרסה האחרונה 

ניתן למצוא את הגרסאות האחרונות במאגר Maven.

3.2. מצב ניפוי באגים

בנוסף, יש מצב ניפוי שגיאות שבו נוכל לעזור לנו לפתור בעיות:

בונה ServiceBuilder = ServiceBuilder חדש ("api_key") .debug ();

אנחנו פשוט חייבים להתקשר לנפות() שיטה. ניפוי באגים יופעל אל System.out קצת מידע רלוונטי.

כמו כן, אם אנו רוצים להשתמש בפלט אחר, יש שיטה אחרת שמקבלת OutputStream לשלוח את המידע על ניפוי באגים אל:

FileOutputStream debugFile = FileOutputStream חדש ("ניפוי באגים"); בונה ServiceBuilder = ServiceBuilder חדש ("api_key") .debug () .debugStream (debugFile);

4. OAuth 1.0 זרימה

עכשיו נתמקד כיצד לטפל בזרימת OAuth1.

בדוגמה זו, אנחנו הולכים לקבל אסימון גישה בעזרת ממשקי ה- API של Twitter ונשתמש בה לצורך הגשת בקשה.

קודם כל, עלינו לבנות את Oauth10Service, כפי שראינו קודם, באמצעות Builder:

שירות OAuth10aService = ServiceBuilder חדש ("api_key") .apiSecret ("api_secret") .build (TwitterApi.instance ());

ברגע שיש לנו את OAuth10Service, אנחנו יכולים להשיג requestToken והשתמש בה כדי לקבל את כתובת ה- URL להרשאה:

OAuth1RequestToken requestToken = service.getRequestToken (); מחרוזת authUrl = service.getAuthorizationUrl (requestToken);

בשלב זה, יש צורך להפנות את המשתמש אליו authUrl וכדי להשיג את oauthVerifier מסופק על ידי הדף.

לפיכך, אנו משתמשים ב- oauthVerifier להשיג את אסימון גישה:

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

לבסוף, אנו יכולים ליצור בקשה באמצעות OAuthRequest התנגד והוסף את האסימון אליו באמצעות signRequest () שיטה:

בקשת OAuthRequest = OAuthRequest חדש (Verb.GET, "//api.twitter.com/1.1/account/verify_credentials.json"); service.signRequest (accessToken, בקשה); תגובה תגובה = service.execute (בקשה);

כתוצאה מהביצוע של זה בַּקָשָׁה, אנחנו מקבלים תְגוּבָה לְהִתְנַגֵד.

5. זרימת OAuth 2.0

זרימת OAuth 2.0 אינה שונה בהרבה מ- OAuth 1.0. על מנת להסביר וריאציות אלה, אנחנו הולכים לקבל אסימון גישה עם ממשקי API של גוגל.

באותו אופן, עשינו בזרימת OAuth 1.0, עלינו לבנות את OAuthService ולקבל את authUrl, אבל הפעם נשתמש ב- OAuth20Service למשל:

שירות OAuth20Service = ServiceBuilder חדש ("api_key") .apiSecret ("api_secret") .scope ("// www.googleapis.com/auth/userinfo.email") .callback ("// localhost: 8080 / auth"). לבנות (GoogleApi20.instance ()); מחרוזת authUrl = service.getAuthorizationUrl ();

שים לב שבמקרה זה עלינו לספק את תְחוּם של הבקשה ושל התקשר חזרה אליהם ניצור קשר בסוף זרימת ההרשאה.

כמו כן, עלינו להפנות את המשתמש אליו authUrl ולקחת את קוד פרמטר בכתובת האתר של החזרה להתקשרות:

OAuth2AccessToken accessToken = service.getAccessToken (קוד); בקשת OAuthRequest = OAuthRequest חדש (Verb.GET, "//www.googleapis.com/oauth2/v1/userinfo?alt=json"); service.signRequest (accessToken, בקשה); תגובה תגובה = service.execute (בקשה);

בסופו של דבר, על מנת להפוך את בַּקָשָׁה, אנחנו מקבלים את אסימון גישה עם getAccessToken () שיטה.

6. ממשקי API מותאמים אישית

כנראה שנצטרך לעבוד עם API שאינו נתמך על ידי ScribeJava. בנסיבות אלה, הספרייה מאפשרת לנו ליישם ממשקי API משלנו.

הדבר היחיד שעלינו לעשות הוא לספק יישום DefaultApi10 אוֹ DefaultApi20 מעמד.

בואו נדמיין שיש לנו שרת הרשאות OAuth 2.0 עם הענקת סיסמא. במקרה זה, אנו יכולים ליישם את DefaultApi20 כדי שנוכל לקחת אסימון גישה:

מחלקה ציבורית MyApi מרחיב את DefaultApi20 {public MyApi () {} מחלקה סטטית פרטית InstanceHolder {סופי סטטי פרטי MyApi INSTANCE = MyApi חדש (); } מופע סטטי ציבורי של MyApi () {return InstanceHolder.INSTANCE; } @Override מחרוזת ציבורית getAccessTokenEndpoint () {return "// localhost: 8080 / oauth / token"; } @Override מוגן מחרוזת getAuthorizationBaseUrl () {return null; }}

לפיכך, אנו יכולים לקבל אסימון גישה באופן דומה לזה שעשינו בעבר:

שירות OAuth20Service = ServiceBuilder חדש ("baeldung_api_key") .apiSecret ("baeldung_api_secret") .scope ("קרא כתוב") .build (MyApi.instance ()); אסימון OAuth2AccessToken = service.getAccessTokenPasswordGrant (שם משתמש, סיסמה); בקשה OAuthRequest = OAuthRequest חדש (פועל. GET, "// localhost: 8080 / לי"); service.signRequest (אסימון, בקשה); תגובה תגובה = service.execute (בקשה);

7. מסקנה

במאמר זה, הסתכלנו על השיעורים השימושיים ביותר ש- ScribeJava מספקת מהמדף.

למדנו כיצד להתמודד עם OAuth 1.0 ו- OAuth 2.0 זורם עם ממשקי API חיצוניים. למדנו גם כיצד להגדיר את הספרייה על מנת להשתמש בממשקי ה- API שלנו.

כרגיל, כל דגימות הקוד המוצגות במדריך זה זמינות ב- GitHub.


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