Sto cercando di capire e implementare un flusso di credenziali client tra il nostro nuovo server REST e la nostra app client esistente. Ho installato OAuth2 di sicurezza primaverile come this. Dalla mia comprensione finora, il mio server dovrebbe supportare la seguente richiesta:Informazioni sul flusso di credenziali del client OAuth2
$ curl -X -v -d 'client_id=the_client&client_secret=secret&grant_type=client_credentials' -X POST "http://localhost:9090/oauth/token"
ma ottengo
InsufficientAuthenticationException: There is no client authentication
causati dalla Principal
essendo null
qui (codice a molla di sicurezza):
@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(
Quindi a quanto pare, ho bisogno di autenticare contro il server prima. Ma questo è non quello che voglio fare. Voglio che due dei miei server parlino tra loro usando un segreto condiviso. Il server del provider OAuth deve fornire un token di accesso al server client (attendibile) su richiesta in modo che il server client possa quindi utilizzare quel token per accedere a tutte le risorse REST sul server. Questo dovrebbe proteggere le risorse REST dall'accesso esterno.
In seguito desidero fornire risorse selezionate a una terza parte e infine implementare una sicurezza a grana più fine anche per la comunicazione da server a server. Ma per ora ho bisogno di proteggere il server REST dall'accesso esterno.
Sembra che potrei avere delle incomprensioni sull'intero flusso di credenziali dei clienti o sull'applicazione della sicurezza di primavera proprio lì, quindi qualsiasi chiarimento sarebbe molto apprezzato.
Grazie per la risposta. Quindi il mio pensiero è sostanzialmente corretto? Per il flusso delle credenziali del client richiedo un token con le credenziali del client e il tipo di concessione e quindi utilizzo quel token per accedere alle risorse protette? Penso di avere un errore di installazione, perché usando il progetto di esempio sparklr la chiamata che ho menzionato sopra funziona ... – Pete
Penso che tu sia sulla strada giusta. Il client richiede un token prima utilizzando un particolare tipo di concessione. Quindi basta passare il token nell'intestazione auth quando si accede alla risorsa protetta. Ho aggiornato la mia risposta con un esempio di accesso alla risorsa. – kldavis4