Spring Security 6.5: ສົ່ງການແລກປ່ຽນລະຫັດອະນຸຍາດ OAuth ຜ່ານພຣັອກຊີ
ໃຫ້ລູກຄ້າຕອບສະໜອງໂທເຄັນຂອງລະຫັດອະນຸຍາດ Spring Security ເປັນ RestClient ທີ່ຮູ້ຈັກພຣັອກຊີ ໂດຍຮັກສາ OAuth converters ແລະ error handler.
ບຣາວເຊີໄປຮອດຜູ້ໃຫ້ບໍລິການຕົວຕົນ ແລ້ວການເຂົ້າສູ່ລະບົບລົ້ມເຫຼວເມື່ອແອັບຯແລກປ່ຽນລະຫັດອະນຸຍາດທີ່ສົ່ງກັບມາ. ການແລກປ່ຽນນັ້ນເປັນຄຳຮ້ອງອອກຈາກເຊີບເວີແອັບຯ ເຊິ່ງມີ HTTP client ຂອງຕົນເອງ.
ສຳລັບ 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);
ຄລາສ converter ແລະ error handler ຮັກສາພຶດຕິກຳຄຳຮ້ອງໂທເຄັນທີ່ມີເອກະສານຂອງ Spring Security. RestClient ທົ່ວໄປທີ່ຕັ້ງຄ່າສຳລັບ JSON API ທີ່ບໍ່ກ່ຽວຂ້ອງເທົ່ານັ້ນບໍ່ແມ່ນການທົດແທນທີ່ທຽບເທົ່າ.
ເຊື່ອມຕໍ່ tokenClient ດຽວກັນນັ້ນເຂົ້າກັບການຕັ້ງຄ່າຄວາມປອດໄພທີ່ມີຢູ່:
http.oauth2Login(login -> login
.tokenEndpoint(token -> token
.accessTokenResponseClient(tokenClient)));
ເຫຼົ່ານີ້ແມ່ນສ່ວນຂອງການຕັ້ງຄ່າສຳລັບແອັບຯທີ່ມີການລົງທະບຽນລູກຄ້າ ແລະ SecurityFilterChain ແລ້ວ. ພວກມັນເລືອກ HTTP proxy ທີ່ບໍ່ມີການກວດສອບ; proxy ທີ່ຕ້ອງການຂໍ້ມູນປະກອບຕ້ອງມີການຕັ້ງຄ່າກວດສອບທີ່ເຂົ້າກັນຂອງການຂົນສົ່ງທີ່ເລືອກ. ສຳລັບຈຸດປາຍທາງໂທເຄັນ HTTPS ທີ່ເຂົ້າເຖິງໄດ້ສາທາລະນະເທິງເສັ້ນທາງສາທາລະນະທີ່ອະນຸຍາດ, ລາຍການ HTTP ຈາກລາຍຊື່ HTTP proxyສາມາດຕື່ມທີ່ຢູ່ proxy ທີ່ບໍ່ມີບັນຊີນັ້ນໄດ້.
ແຍກໂຮສຂອງ proxy ອອກຈາກພອດ ແລະ ແຜນ URL ຂອງມັນ. ປ່ອຍ URI ໂທເຄັນຂອງຜູ້ໃຫ້ບໍລິການຕົວຕົນໄວ້ເປັນປາຍທາງ. ຕົວຢ່າງນີ້ບໍ່ໄດ້ທົດແທນການກວດສອບໃບຢັ້ງຢືນ.
ຄຳຮ້ອງຕໍ່ມາຕ້ອງມີການກວດສອບຄວາມເປັນເຈົ້າຂອງຂອງຕົນເອງ. ການດຶງ UserInfo, ການແລກປ່ຽນໂທເຄັນຣີເຟຣຊ, ການໃຫ້ client-credentials ແລະ ການເອີ້ນ API ທີ່ຖືກປ້ອງກັນສາມາດໃຊ້ວັດຖຸລູກຄ້າອື່ນໄດ້. ຕັ້ງຄ່າລູກຄ້າທີ່ຮອງຮັບທີ່ເໝາະສົມເມື່ອການດຳເນີນການນັ້ນຕ້ອງການເສັ້ນທາງນຳ. ສຳລັບການໄຫຼ client_credentials ແບບປະຕິກິລິຍາຂອງ Spring Security 6.5 ໃຫ້ຕັ້ງຄ່າລູກຄ້າໂທເຄັນແບບປະຕິກິລິຍາ ແລະ ຜູ້ໃຫ້ການອະນຸຍາດຂອງມັນແຍກຕ່າງຫາກ.
ຕົວຢ່າງເກົ່າທີ່ໃຊ້ OAuth2RestTemplate ແລະ AccessTokenProvider ເປັນຂອງໂຄງການ Spring Security OAuth ເກົ່າ. ເລືອກ API ທີ່ແອັບຯທີ່ຕິດຕັ້ງໃຊ້ ກ່ອນປັບແຕ່ງໂຄ້ດ; ຢ່າປະສົມວັດຖຸເຫຼົ່ານັ້ນເຂົ້າໃນການຕັ້ງຄ່ານີ້.