מדריך מהיר לשימוש במקלדת עם מגף קפיץ

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

במאמר זה נסקור את היסודות של הגדרת שרת Keycloak, כיצד לחבר אליו יישום Spring Boot וכיצד להשתמש בו עם Spring Security.

2. מה זה מפלצת?

Keycloak הוא פתרונות קוד פתוח לניהול זהויות וגישה המיועדים ליישומים ושירותים מודרניים.

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

במדריך שלנו, נשתמש במסוף הניהול של Keycloak לצורך הגדרה ואז התחברות ל- Spring Boot באמצעות מתאם לקוח Keycloak.

3. הגדרת שרת Keycloak

3.1. הורדה והתקנת Keycloak

ישנן מספר הפצות לבחירה.

עם זאת, במדריך זה נשתמש בגרסה העצמאית.

בואו להוריד את הפצת שרתים עצמאיים Keycloak-11.0.2 מהמקור הרשמי.

לאחר שהורדנו את הפצת השרתים העצמאים, נוכל לפתוח את רוכסן ולהפעיל את Keycloak מהטרמינל:

unzip keycloak-11.0.2.zip cd keycloak-11.0.2 / bin ./standalone.sh -Djboss.socket.binding.port-offset = 100

אחרי ריצה ./standalone.sh, Keycloak תתחיל את שירותיה. ברגע שנראה שורה המכילה Keycloak 11.0.2 (WildFly Core 12.0.3.Final) התחילנדע שההפעלה שלו הושלמה.

עכשיו בואו נפתח דפדפן ונבקר // localhost: 8180. יופנה אלינו // localhost: 8180 / auth ליצירת כניסה מנהלית:

בואו ליצור משתמש מנהל ראשוני בשם ראשוני 1 עם הסיסמה zaq1! QAZ. בלחיצה לִיצוֹר, נראה הודעה המשתמש נוצר.

כעת נוכל להמשיך למסוף הניהולי. בדף הכניסה, נכניס את אישורי המשתמש הראשוני של מנהל המערכת:

3.2. יצירת ממלכה

כניסה מוצלחת תוביל אותנו למסוף ותפתח את ברירת המחדל לִשְׁלוֹט ממלכה עבורנו.

כאן נתמקד ביצירת תחום מותאם אישית.

בוא ננווט לפינה השמאלית העליונה העליונה לגלות את הוסף ממלכה לַחְצָן:

במסך הבא, בואו נוסיף תחום חדש שנקרא SpringBootKeycloak:

לאחר לחיצה על לִיצוֹר כפתור, נוצר ממלכה חדשה ואנו יופנה אליה. כל הפעולות בסעיפים הבאים יבוצעו בחדש זה SpringBootKeycloak תְחוּם.

3.3. יצירת לקוח

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

אבל עלינו להוסיף לקוח חדש ליישום שלנו, אז נלחץ לִיצוֹר. אנו נתקשר ללקוח החדש אפליקציית התחברות:

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

בהמשך, ניצור יישום אתחול האביב הפועל בנמל 8081 שישתמש בלקוח זה. לפיכך השתמשנו בכתובת אתר להפניה מחדש של // localhost: 8081 /* למעלה.

3.4. יצירת תפקיד ומשתמש

Keycloak משתמש בגישה מבוססת תפקידים. לכן, לכל משתמש חייב להיות תפקיד.

לשם כך, עלינו לנווט אל ה- תפקידים עמוד:

לאחר מכן נוסיף את מִשׁתַמֵשׁ תַפְקִיד:

עכשיו יש לנו תפקיד שניתן להקצות למשתמשים, אך עדיין אין משתמשים. אז בוא נלך ל משתמשים דף והוסף אחד:

נוסיף משתמש בשם user1:

לאחר יצירת המשתמש, יוצג דף עם פרטיו:

כעת אנו יכולים ללכת אל אישורים הכרטיסייה. אנו נגדיר את הסיסמה הראשונית ל- [מוגן בדוא"ל]:

לבסוף, ננווט אל ה- מיפוי תפקידים הכרטיסייה. אנו נקצה את מִשׁתַמֵשׁ תפקיד שלנו משתמש 1:

4. יצירת אסימוני גישה עם ה- API של Keycloak

Keycloak מספק REST API ליצירת וריענון אסימוני גישה. אנו יכולים להשתמש ב- API זה בקלות כדי ליצור דף כניסה משלנו.

ראשית, עלינו לרכוש אסימון גישה מ- Keycloak על ידי שליחת בקשת POST לכתובת URL זו:

// localhost: 8180 / auth / realms / master / protocol / openid-connect / token

על הבקשה להיות גוף JSON זה:

{'client_id': 'your_client_id', 'username': 'your_username', 'password': 'your_password', 'grant_type': 'password'}

בתגובה נקבל אסימון גישה ו רענון_אסימון.

יש להשתמש באסימון הגישה בכל בקשה למשאב המוגן על ידי Keycloak על ידי הצבתו פשוט ב- הרשאה כּוֹתֶרֶת:

כותרות: {'Authorization': 'Bearer' + access_token}

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

{'client_id': 'your_client_id', 'refresh_token': refresh_token_from_previous_request, 'grant_type': 'refresh_token'}

Keycloak יגיב על זה עם חדש אסימון גישה ו רענון_אסימון.

5. יצירת יישום אתחול האביב

5.1. תלות

התלות האחרונות של Spring Boot Keycloak Starter נמצאות ב- Maven Central.

מתאם אתחול האביב של Keycloakמנצל את התצורה האוטומטית של Spring Boot, אז כל מה שאנחנו צריכים לעשות זה להוסיף את המתנע של Keycloak Spring Boot לפרויקט שלנו.

בתוך אלמנט ה- XML ​​של התלות, אנו זקוקים לפריטים הבאים כדי להפעיל את Keycloak עם Spring Boot:

 org.keycloak keycloak-spring-boot-starter 

לאחר רכיב ה- XML ​​של התלות, עלינו לציין תלות ניהול לקייקלוק:

   org.keycloak.bom keycloak-adapter-bom 11.0.2 pom יבוא 

המכולות המשובצות הבאות נתמכות כעת ואינן דורשות תלות נוספת אם משתמשים באתחול האביב של הקפיץ:

  • טומקט
  • זֶרֶם תַחתִי
  • מֵזַח

5.2. דפי אינטרנט של Thymeleaf

אנו משתמשים ב- Thymeleaf עבור דפי האינטרנט שלנו.

יש לנו שלושה עמודים:

  • external.html - דף אינטרנט הפונה כלפי חוץ לציבור
  • לקוחות.html - דף הפונה פנימי אשר הגישה שלו מוגבלת רק למשתמשים מאומתים בעלי התפקיד מִשׁתַמֵשׁ.
  • layout.html - פריסה פשוטה, המורכבת משני שברים, המשמשת הן לדף הפונה כלפי חוץ והן לדף הפונה פנימה

הקוד לתבניות Thymeleaf זמין ב- Github.

5.3. בקר

בקר האינטרנט ממפה את כתובות ה- URL הפנימיות והחיצוניות בתבניות ה- Thymeleaf המתאימות:

@GetMapping (path = "/") אינדקס מחרוזות ציבורי () {להחזיר "חיצוני"; } @GetMapping (path = "/ clients") לקוחות מחרוזת ציבוריים (מנהל ראשי, מודל מודל) {addCustomers (); model.addAttribute ("לקוחות", customerDAO.findAll ()); model.addAttribute ("שם משתמש", principal.getName ()); להחזיר "לקוחות"; }

בשביל / לקוחותאנו מאחזרים את כל הלקוחות ממאגר ומוסיפים את התוצאה כתכונה ל דֶגֶם. בהמשך אנו חוזרים על התוצאות ב- Thymeleaf.

כדי להיות מסוגל להציג שם משתמש, אנו מזריקים את ה- קֶרֶן גם כן.

שים לב שאנחנו משתמשים כאן בלקוחות בדיוק כנתונים גולמיים לתצוגה, ותו לא.

5.4. תצורת מפתחות

הנה התצורה הבסיסית והחובה:

keycloak.auth-server-url = // localhost: 8180 / auth keycloak.realm = SpringBootKeycloak keycloak.resource = כניסה לאפליקציה keycloak.public-client = true 

כזכור, התחלנו את קייקלואק בנמל 8180ומכאן הנתיב שצוין ב keycloak.auth-server-url. אנו מזינים את שם התחום שיצרנו במסוף הניהול של Keycloak.

הערך בו אנו מציינים keycloak.resource תואם את הלקוח ששמנו במסוף הניהול.

להלן מגבלות האבטחה בהן נשתמש:

keycloak.security-constraints [0] .authRoles [0] = keycloak.security-constraints [0] .securityCollections [0]. דפוסים [0] = / לקוחות / *

אילוצים אלה מבטיחים שכל בקשה ל / לקוחות / * יאושר רק אם מי שמבקש הוא משתמש מאומת עם התפקיד מִשׁתַמֵשׁ.

בנוסף, אנו יכולים להגדיר keycloak.principal-attribute כפי ש שם משתמש מועדף כדי לאכלס את הבקר שלנו קֶרֶן עם משתמש מתאים:

keycloak.principal-attribute = שם משתמש מועדף

5.5. הפגנה

עכשיו, אנחנו מוכנים לבדוק את היישום שלנו. להפעלת יישום Spring Boot, נוכל להפעיל אותו בקלות באמצעות IDE כמו Spring Tool Suite (STS) או להריץ פקודה זו במסוף:

mvn מגף נקי נקי: לרוץ

בביקור // localhost: 8081 אנחנו מבינים:

עכשיו אנחנו לוחצים לקוחות כדי להיכנס לאינטרא-נט, שהוא המיקום של מידע רגיש.

אנו יכולים לראות כי הופנו לאימות באמצעות Keycloak כדי לראות אם אנו מורשים לצפות בתוכן זה:

ברגע שאנחנו מתחברים כ משתמש 1, Keycloak יאמת את ההרשאה שלנו - שיש לנו את מִשׁתַמֵשׁ תפקיד - ואנחנו יופנו למוגבלים לקוחות עמוד:

כעת סיימנו את מערך החיבור של Spring Boot עם Keycloak והדגמת איך זה עובד.

כמו שאנו יכולים לראות, כל תהליך ההתקשרות לשרת הרשאות Keycloak טופל בצורה חלקה על ידי Spring Boot בשבילנו. לא היינו צריכים להתקשר לממשק ה- API של Keycloak כדי ליצור את אסימון Access בעצמנו, או אפילו לשלוח את כותרת ההרשאה במפורש בבקשתנו למשאבים מוגנים.

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

6. אבטחת אביב

יש מתאם אבטחה למעיין Keycloak, וזהו כבר נכלל בתלות המתנע שלנו למגף האביב. כעת נראה כיצד לשלב את Spring Security עם Keycloak.

6.1. תלות

כדי להשתמש באבטחת אביב עם Spring Boot, עלינו להוסיף תלות זו:

 org.springframework.boot spring-boot-starter-security 2.2.6.RELEASE 

המהדורה האחרונה של Spring Boot Starter Security ניתן למצוא ב- Maven Central.

6.2. מחלקת תצורה

Keycloak מספק א KeycloakWebSecurityConfigurerAdapter כמעמד בסיס נוח ליצירת WebSecurityConfigurer למשל.

זה מועיל מכיוון שכל יישום המאובטח על ידי Spring Security דורש מחלקת תצורה המתרחבת מתאם WebSecurityConfigurer:

@Configuration @EnableWebSecurity @ComponentScan (basePackageClasses = KeycloakSecurityComponents.class) מחלקה SecurityConfig מרחיב KeycloakWebSecurityConfigurerAdapter {@Autorated public void configureGlobal (AuthenticationManagerBuilderAuthenticationAuthentication); keycloakAuthenticationProvider.setGrantedAuthoritiesMapper (חדש SimpleAuthorityMapper ()); auth.authenticationProvider (keycloakAuthenticationProvider); } @Bean KeycloakSpringBootConfigResolver KeycloakConfigResolver () {להחזיר KeycloakSpringBootConfigResolver חדש (); } @Bean @Override מוגן SessionAuthenticationStrategy sessionAuthenticationStrategy () {להחזיר חדש RegisterSessionAuthenticationStrategy (SessionRegistryImpl חדש ()); } תצורת הריק המוגנת על ידי @Override (HttpSecurity http) זורקת חריג {super.configure (http); http.authorizeRequests () .antMatchers ("/ clients *") .hasRole ("user") .anyRequest () .permitAll (); }}

בקוד לעיל, השיטה configureGlobal () משימות SimpleAuthorityMapper כדי לוודא שלא קודמים לתפקידים תַפְקִיד_.

שיטה אחרת, keycloakConfigResolver מגדיר שאנו רוצים להשתמש בתמיכת קובץ האביב של Boot Boot במקום ברירת המחדל keycloak.json.

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

# keycloak.security-constraints [0] .authRoles [0] = משתמש # keycloak.security-constraints [0] .securityCollections [0]. דפוסים [0] = / לקוחות / *

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

7. מסקנה

במדריך זה הגדרנו שרת Keycloak והשתמשנו בו עם יישום Spring Boot.

ראינו גם כיצד להקים את Spring Security ולהשתמש בו בשיתוף Keycloak. גרסת עבודה של הקוד המוצגת במאמר זה זמינה באתר Github.


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