java spring rest spring-security oauth-2.0

java - Entendiendo el flujo de credenciales del cliente OAuth2



spring rest (1)

No está autentificando su cliente al servidor de Autorización.

Necesitas hacer algo como esto:

curl --user the_client:secret --data "grant_type=client_credentials" http://localhost:9090/oauth/token

Esto es autenticar el cliente al servidor de autorización y luego especificar grant_type y otros parámetros. Esto devolverá un token de acceso de tipo ''portador'' con un alcance determinado por los detalles del cliente oauth. Una vez que tenga el token, puede acceder a sus recursos protegidos configurando el encabezado de Autorización:

curl -H "Authorization: Bearer <accessToken>" <resourceUrl>

Estoy tratando de entender e implementar un flujo de credenciales de cliente entre nuestro nuevo servidor REST y nuestra aplicación de cliente existente. He configurado Spring OAuth2 de seguridad de this . Según mi entendimiento, mi servidor ahora debería admitir la siguiente solicitud:

$ curl -X -v -d ''client_id=the_client&client_secret=secret&grant_type=client_credentials'' -X POST "http://localhost:9090/oauth/token"

pero me sale

InsufficientAuthenticationException: There is no client authentication

causado porque el Principal es null aquí (código de seguridad de primavera):

@FrameworkEndpoint @RequestMapping(value = "/oauth/token") public class TokenEndpoint extends AbstractEndpoint { @RequestMapping public ResponseEntity<OAuth2AccessToken> getAccessToken(Principal principal, @RequestParam("grant_type") String grantType, @RequestParam Map<String, String> parameters) { if (!(principal instanceof Authentication)) { throw new InsufficientAuthenticationException(

Por lo que parece, primero debo autenticarme contra el servidor . Pero eso no es lo que quiero hacer . Quiero que dos de mis servidores se comuniquen entre sí mediante un secreto compartido. El servidor del proveedor de OAuth debe proporcionar un token de acceso al servidor del cliente (de confianza) a pedido, para que el servidor del cliente pueda usar ese token para acceder a todos los recursos REST en el servidor. Esto debería proteger los recursos REST del acceso externo.

Más adelante, deseo proporcionar recursos seleccionados a un tercero y, finalmente, implementar una seguridad más precisa para la comunicación de servidor a servidor. Pero por ahora necesito proteger el servidor REST del acceso externo.

Parece que podría tener algunos malentendidos sobre el flujo de credenciales de todo el cliente o la aplicación de seguridad de primavera allí, por lo que cualquier aclaración sería muy apreciada.