يصل المتصفح إلى مزوّد الهوية، ثم يفشل تسجيل الدخول عندما يتبادل التطبيق رمز التفويض المُعاد. ذلك التبادل طلب صادر من خادم التطبيق، وله عميل 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 عامًا مهيأً فقط لواجهة 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 التي يستخدمها التطبيق المثبّت قبل تكييف الشيفرة؛ ولا تخلط تلك الكائنات في هذا الإعداد.

مقالات ذات صلة