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

עבור ה-API מבוסס RestClient הזמין ב-Spring Security 6.5, ספקו מפעל בקשות שמודע לפרוקסי ללקוח תגובת האסימון של קוד ההרשאה:

SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
factory.setProxy(new java.net.Proxy(
    java.net.Proxy.Type.HTTP,
    new java.net.InetSocketAddress("proxy.example", 8080)));
factory.setConnectTimeout(5000);
factory.setReadTimeout(15000);

RestClient tokenHttp = RestClient.builder()
    .requestFactory(factory)
    .messageConverters(converters -> {
        converters.clear();
        converters.add(new FormHttpMessageConverter());
        converters.add(new OAuth2AccessTokenResponseHttpMessageConverter());
    })
    .defaultStatusHandler(new OAuth2ErrorResponseErrorHandler())
    .build();

RestClientAuthorizationCodeTokenResponseClient tokenClient =
    new RestClientAuthorizationCodeTokenResponseClient();
tokenClient.setRestClient(tokenHttp);

מחלקות הממיר ומטפל השגיאות משמרות את התנהגות בקשת האסימון המתועדת של Spring Security. ‏RestClient כללי שהוגדר רק עבור API ‏JSON לא קשור אינו תחליף שקול.

חברו את אותו tokenClient לתצורת האבטחה הקיימת:

http.oauth2Login(login -> login
    .tokenEndpoint(token -> token
        .accessTokenResponseClient(tokenClient)));

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

הפרידו את מארח הפרוקסי מהפורט ומסכמת ה-URL שלו. השאירו את URI האסימון של ספק הזהות כיעד. הדוגמה אינה מחליפה אימות תעודות.

בקשות מאוחרות יותר זקוקות לבדיקת בעלות משלהן. אחזור UserInfo, חילופי אסימון רענון, מענקי client-credentials וקריאות API מוגנות יכולים להשתמש באובייקטי לקוח אחרים. הגדירו את הלקוח הנתמך המתאים כאשר גם הפעולה הזו זקוקה לנתיב. עבור זרימת client_credentials הריאקטיבית של Spring Security 6.5, הגדירו את לקוח האסימון הריאקטיבי ואת ספק המענקים שלו בנפרד.

דוגמאות ישנות המשתמשות ב-OAuth2RestTemplate וב-AccessTokenProvider שייכות לפרויקט Spring Security OAuth הישן יותר. בחרו את ה-API שבו משתמש היישום המותקן לפני התאמת קוד; אל תערבבו את האובייקטים האלה בתצורה הזו.

מאמרים קשורים