spring-security oauth-2.0 spring-security-oauth2 spring-cloud

spring-security - spring security angular 4



Spring OAuth: servidor de recursos con backend del servidor de autorizaciĆ³n (1)

Después de probar durante horas, ahora encontré una solución.

Business Server (servidor de recursos) ahora se ve de la siguiente manera:

@SpringBootApplication @EnableOAuth2Sso @EnableOAuth2Resource public class BusinessService { public static void main(final String[] args) { final ConfigurableApplicationContext context = SpringApplication.run(BusinessService.class, args); } }

con dos configuraciones, una para el SSO:

@Configuration public class OAuth2SsoConfiguration extends OAuth2SsoConfigurerAdapter { @Override public void match(final RequestMatchers matchers) { matchers.antMatchers("/"); } @Override public void configure(final HttpSecurity http) throws Exception { http.authorizeRequests().anyRequest().permitAll(); } }

y uno para el Recurso:

@Configuration public class ResourceServerConfiguration extends ResourceServerConfigurerAdapter { @Override public void configure(final HttpSecurity http) throws Exception { http.requestMatchers().antMatchers("/resource/**").and().authorizeRequests().anyRequest().authenticated().antMatchers("/").permitAll(); } }



Esto resulta en lo siguiente:

curl -v http://localhost:8667/

devoluciones

HTTP/1.1 200 OK {"links":[{"rel":"login","href":"http://localhost:8667/login"}]}



curl -v http://localhost:8667/resource/

devoluciones

HTTP/1.1 401 Unauthorized {"error":"unauthorized","error_description":"Full authentication is required to access this resource"}



curl -v http://localhost:8667/login

devoluciones

HTTP/1.1 302 Found Location: http://localhost:8666/user/oauth/authorize?client_id=clientId&redirect_uri=http%3A%2F%2Flocalhost%3A8667%2Flogin&response_type=code&state=YmmNO9

Así que mi servicio de negocios está protegido con un servidor de recursos que devuelve un 401 para todos los recursos comerciales. La raíz del servicio se aplica a todos los clientes para que puedan descubrir la relación de inicio de sesión y si siguen esta relación, se les redirige al servidor de Autorización.

Deseo desarrollar dos servicios independientes, uno para asuntos de negocios y otro para la autenticación de usuarios usando Spring OAuth 2

Llamémoslos Business-Service y OAuth-Service.

Ahora quiero que el delegado de servicio empresarial al servicio OAuth si una solicitud no está autenticada. La aplicación cliente (una aplicación de Android) no debe saber a priori sobre el Servicio OAuth, solo debe ser delegada por el Servicio Empresarial con un redireccionamiento HTTP 302 para solicitudes no autenticadas. Para ser precisos, quiero que mi página de destino de la API proporcione un enlace a http://businessservice.com/login y cuando mi aplicación cliente decida seguir este enlace, se redirige al OAuth-Service.

Si hago una anotación en el Business-Service con @ EnableOAuth2Resource , todos sus recursos están protegidos y devuelvo un 401 cuando los curvo sin un token de acceso. Hasta aquí todo bien. Si proporciono un token de acceso como este:

curl -v http://localhost:8667/resource/ -H "Authorization: Bearer $TOKEN"

Puedo acceder al recurso. Sigue bien.

Sin embargo, si anoto el Business-Service con @ EnableOAuth2Sso para habilitar la redirección al servicio OAuth, pierde la capacidad de acceder a los recursos con un token de acceso (el mismo curl que el anterior), solo devuelve un 302 a la página de inicio de sesión http: // localhost: 8667 / login

Si utilizo ambas anotaciones, @ EnableOAuth2Resource siempre parece "ganar", ya que la autenticación funciona pero al llamar a http: // localhost: 8667 / login devuelve un 404.

Entonces, ¿cuál es la forma correcta de crear un servidor de recursos que delegue en el servidor de autenticación para llamadas no autenticadas?