/ / Как да защитите API на REST в уеб приложението Spring Boot? - почивка, пролетна обувка, пролет-сигурност

Как да защитим API за REST в уеб приложението за зареждане на пролетта? - почивка, ботуши, пролет-сигурност

Имам две уеб приложения Spring Boot. И двете приложения имат различни бази данни и различни набори от потребители. Също така и двете приложения използват Spring Security за автентификация и оторизация, които работят правилно.

Във всеки даден момент ще имам един екземпляр от първото стартиране на приложение и няколко екземпляра на второто уеб приложение.

Искам да изложа API на REST от 1-во уеб приложение (един екземпляр работи) и да мога да използвам тези API на REST от второ уеб приложение (работещи няколко екземпляра).

Как да се уверя, че REST API могат да бъдат достъпни сигурно при правилно удостоверяване и само чрез инстанции на 2-ри приложения.

Отговори:

3 за отговор № 1

Ако можете да промените сигурността си, бих ви препоръчал да използвате OAUTH2. По принцип той генерира маркер, който се използва във вашите случаи APP2 за извършване на API обаждания. Можете да видите повече тук.

https://spring.io/guides/tutorials/spring-boot-oauth2/

http://websystique.com/spring-security/secure-spring-rest-api-using-oauth2/

Но ако не можете да промените сигурността на приложението си, виеможе да продължи да използва текущата си схема. В APP1 можете да създадете потребител за API обаждания, този потребител има достъп само до услугите на API. В своя APP2 трябва да съхранявате идентификационните данни за достъп до APP1. Накрая влезете в APP1 и извикате API с HTTP клиент, можете да използвате Spring RestTemplate или Apache HttpComponents Client.


0 за отговор № 2

Удостоверяването на базата на SSL може да бъде опция, ако сериозно мислите за аспектите на сигурността.

Да приемем, че REST api, изложен на App 1, е над HTTPs, след това можете да конфигурирате приложението 1 да поиска от клиента да даде SSL / TLS сертификат, когато се опита да получи достъп до този REST API (изложен от приложение 1).

Това ще ни помогне да установим, че клиентът наистина е клиент от приложение 2.

Още два цента:
В случай, че вашите App 1 REST API обаждания се нуждаят от зарежданебалансиране, NGINX трябва да бъде избран от вас. Автентификацията на базата на SSL клиент може да бъде заредена до NGINX и вашето приложение за зареждане Spring не се притеснявайте повече за конфигурациите, свързани с SSL.


0 за отговор № 3

Решението, с което отидохме, беше да защитим и двете с помощта на OAuth2 client_credentials работен процес. Това е потокът OAuth2, при който клиентите искат маркер от името си, а не извикващ Потребител.

Разгледайте Пролетна сигурност в облака

1) Защитете вашите услуги, като използвате @EnableResourceServer

@SpringBootApplication
@EnableResourceServer
public class Application ...

2) Обаждайте се от една услуга към друга, като използвате OAuth2RestTemplate

Разгледайте Реле на токен сървър за ресурси в http://cloud.spring.io/spring-cloud-security/spring-cloud-security.html който ще уточни как да конфигурирате Oauth2RestTemplate да препраща подробности за контекста на сигурността (маркера) от една услуга на друга.

3) Обслужване A и Service B трябва да могаткомуникират с помощта на тези техники, ако са конфигурирани с един и същ клиент и Secret Oauth2. Това ще бъде конфигурирано във файла "application.properties файл, надяваме се инжектиран от околната среда. Приложното поле на Oauth2 може да се използва като идентификатори на роли. Следователно можете да кажете, че само клиент с Скоупс (api-read, api-write) трябва да има достъп до Крайна точка A в Услуга A, Това може да се конфигурира, като се използва и конфигурацията за разрешение на Spring Security @EnableGlobalMethodSecurity