מבוא לאבטחת ענן אביב

1. סקירה כללית

מודול האבטחה של Spring Cloud מספק תכונות הקשורות לאבטחה מבוססת אסימונים ביישומי Spring Boot.

באופן ספציפי, זה מקל על SSO מבוסס OAuth2 - עם תמיכה בהעברת אסימונים בין שרתי משאבים, כמו גם קביעת תצורה של אימות במורד הזרם באמצעות פרוקסי Zuul מוטבע.

במאמר מהיר זה, נבחן כיצד אנו יכולים להגדיר תכונות אלה באמצעות יישום לקוח Spring Boot, שרת הרשאה ו- REST API הפועל כשרת משאבים.

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

2. הפעל במהירות אפליקציית אבטחה בענן

נתחיל ב קביעת תצורה של SSO ביישום Boot Boot.

ראשית, עלינו להוסיף את אביב-ענן-starter-oauth2 תלות:

 org.springframework.cloud spring-cloud-starter-oauth2 2.2.2.RELEASE 

זה גם יביא את אביב-ענן-התחל-אבטחה תלות.

אנו יכולים להגדיר כל אתר חברתי כשרת Auth עבור האתר שלנו או שנוכל להשתמש בשרת שלנו. במקרה שלנו, בחרנו באפשרות השנייה והגדרנו יישום הפועל כשרת הרשאות - אשר נפרס באופן מקומי ב // localhost: 7070 / authserver.

שרת ההרשאה שלנו משתמש באסימוני JWT.

בנוסף, כדי שכל לקוח יוכל לאחזר את אישורי המשתמש, עלינו להגדיר את שרת המשאבים שלנו, הפועל ביציאה 9000, עם נקודת קצה שיכולה לשרת את האישורים האלה.

כאן הגדרנו את /מִשׁתַמֵשׁ נקודת קצה שזמינה בכתובת // localhost: 9000 למשתמש.

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

כעת אנו יכולים להוסיף את ההערה בכיתת תצורה ביישום הלקוח שלנו:

@Configuration @ EnableOAuth2Sso המחלקה הציבורית SiteSecurityConfigurer מרחיב את WebSecurityConfigurerAdapter {@Override מוגן ריק להגדיר (HttpSecurity http) זורק חריג {// ...}}

כל בקשות הדורשות אימות יופנו לשרת ההרשאה. כדי שזה יעבוד עלינו להגדיר את מאפייני השרת:

אבטחה: oauth2: לקוח: accessTokenUri: // localhost: 7070 / authserver / oauth / token userAuthorizationUri: // localhost: 7070 / authserver / oauth / authorize clientId: authserver clientSecret: passwordforauthserver resource: userInfoUri: // localhost: 9000 / user

שים לב שאנחנו צריכים להיות אביב-אתחול-התחלה-אבטחה בנתיב הכיתה שלנו כדי למצוא את התצורה שלמעלה עובדת.

3. העברת אסימוני גישה

בזמן העברת אסימון, לקוח OAuth2 מעביר את אסימון ה- OAuth2 שהתקבל על ידו לבקשת משאבים יוצאת.

מאז הכרזנו על @ EnableOauth2Sso ביאור, מגף האביב מוסיף OAuth2ClientContext שעועית בהיקף הבקשה. על סמך זה נוכל ליצור משלנו OAuth2RestTemplate ביישום הלקוח שלנו:

@Bean OAuth2RestOperations ציבורי restOperations (OAuth2ProtectedResourceDetails משאב, הקשר OAuth2ClientContext) {להחזיר OAuth2RestTemplate חדש (משאב, הקשר); }

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

4. העברת אסימון OAuth באמצעות ה- RestTemplate

הגדרנו בעבר א מנוחה פעולות שעועית מהסוג OAuth2RestTemplate ביישום הלקוח שלנו. כתוצאה, אנחנו יכולים להשתמש ב- getForObject () שיטה של OAuth2RestTemplate לשלוח בקשה עם האסימונים הדרושים לשרת משאבים מוגן מהלקוח שלנו.

ראשית, נגדיר נקודת קצה הדורשת אימות בשרת המשאבים שלנו:

@GetMapping ("/ person") @ PreAuthorize ("hasAnyRole ('ADMIN', 'USER')") public @ResponseBody Person person Info () {להחזיר אדם חדש ("abir", "Dhaka", "בנגלדש", 29, "זָכָר"); } 

זוהי נקודת סיום פשוטה של ​​REST המחזירה ייצוג JSON של a אדם לְהִתְנַגֵד.

עַכשָׁיו, אנו יכולים לשלוח בקשה מיישום הלקוח באמצעות getForObject () שיטה שתעביר את האסימון לשרת המשאבים:

@Outowired פרטי RestOperations restOperations; @GetMapping ("/ personInfo") אדם ModelAndView ציבורי () {ModelAndView mav = חדש ModelAndView ("personinfo"); מחרוזת personResourceUrl = "// localhost: 9000 / person"; mav.addObject ("אדם", restOperations.getForObject (personResourceUrl, String.class)); החזר mav; }

5. קביעת תצורה של זול לממסר אסימונים

אם נרצה להעביר אסימון במורד הזרם לשירותי ה- proxy, נוכל להשתמש ב- Spring Cloud Zuul Embedded Reverse Proxy.

ראשית, עלינו להוסיף את התלות של Maven לעבודה עם Zuul:

 org.springframework.cloud spring-cloud-starter-netflix-zuul 

לאחר מכן, עלינו להוסיף את ה- @אפשר ZuulProxy ביאור למחלקת התצורה שלנו ביישום הלקוח:

@Configuration @ EnableOAuth2Sso @EnableZuulProxy מחלקה ציבורית SiteSecurityConfigurer מרחיב את WebSecurityConfigurerAdapter {// ...}

כל שנותר לעשות הוא להוסיף את מאפייני התצורה של Zuul ל- שלנו application.yml קוֹבֶץ:

צוול: רגיש כותרות: קובץ Cookie, קבוצות קובצי Cookie: משאב: נתיב: / api / ** url: // localhost: 9000 user: path: / user / ** url: // localhost: 9000 / user

כל בקשה שמגיעה אל /api נקודת הקצה של יישום הלקוח תנותב לכתובת האתר של שרת המשאבים. עלינו לספק את כתובת האתר של נקודת הקצה של אישורי המשתמש.

6. מסקנה

במאמר מהיר זה, בחנו כיצד להשתמש באבטחת Spring Cloud עם OAuth2 ו- Zuul כדי לקבוע תצורה של שרתי אישור ומשאבים מאובטחים, כמו גם כיצד להעביר אסימונים OAuth2 בין שרתים באמצעות Oauth2RestTemplate ו- Embedded Zuul Proxy.

כמו תמיד, הקוד זמין ב- GitHub.


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