convalida il token di accesso OAuth 2.0 da un server di risorse RESTful Spring


Voglio proteggere il mio backend riposante di primavera. Un modo (il diritto?) è usare OAuth 2.0 come mostrato qui:

Http://www.youtube.com/watch?v=8uBcpsIEz2I

All'interno della mia architettura il server delle risorse e il server di autorizzazione NON SONO la stessa entità. In realtà fornisco solo alcuni servizi JSON REST. Nessuna interfaccia utente. Se leggo OAuth2 RFC dicono semplicemente:

L'interazione tra il server di autorizzazione e il server delle risorse è oltre l'ambito di questa specifica. Il server di autorizzazione può essere lo stesso server del server delle risorse o un'entità separata. Un singolo server di autorizzazione può emettere token di accesso accettati da più server di risorse.

Ho trovato un buon diagramma su cloudfoundry.com (relativo al video di youtube sopra) che sto usando per illustrare la mia vista:

inserisci qui la descrizione dell'immagine

Fornitore di" token": questo potrebbe / dovrebbe essere google o Facebook per esempio.

Backend RESTful: questo è in realtà il mio codice. Servizi riposanti primaverili come:

@Controller
@RequestMapping("/api/v1")
public class MyResourceToProtect {

    @Autowired
    private MyService service;

    @RequestMapping(value = "/resource/delete/{name}",
                    method = RequestMethod.DELETE,
                    consumes = MediaType.APPLICATION_JSON_VALUE,
                    headers = "Content-Type=application/json")
    @ResponseStatus(HttpStatus.OK)
    public void delete(@PathVariable("name") String name) {
        service.delete(name);
    }
}

(Questo è solo un codice di esempio)

Ora la mia domanda: è in qualche modo possibile convalidare i token di accesso generati dall'AuthServer (Facebook, Google)? So che ho bisogno di avere una mappatura "token to user" (database) da qualche parte sul mio ResourceServer. Fondamentalmente mi piacerebbe progettare la mia API RESTful come una da PayPal:

Https://developer.paypal.com/webapps/developer/docs/integration/direct/make-your-first-call/

Ma come posso gestire i passaggi 1 e 2 se voglio usare Facebook o Google come provider di autenticazione? E ' possibile?

Pensiero aggiuntivo: probabilmente ho bisogno di fornire il mio endpoint /oauth2/token e quindi delegare all'AuthProvider sottostante.

Author: domi, 2013-07-14

1 answers

Non so come rispondere a tutte le domande con un bel inchino, quindi metterò i seguenti punti là fuori:

  • Stai cercando di consumare solo un'API protetta da OAuth come Facebook in modo protetto da OAuth? Usa Primavera sociale.
  • Se stai cercando di creare la tua API REST e utilizzare il tuo contesto utente, usa Spring Security OAuth. In questo caso, richiederesti ai client di autenticarsi usando OAuth contro la TUA API, non Facebook o LinkedIn, ecc.
  • Primavera Sicurezza sociale (nel 1.2.x series) supporta 'firma' l'utente in come risultato di una connessione OAuth (ad esempio, 'signin con facebook,' '..Twitter,' '..linkedin, ' ecc., e la tua applicazione alla fine finisce con un principio di sicurezza Spring in sessione, proprio come se avessi usato un modulo HTTP per firmare manualmente l'utente.
  • Spring Security A OAuth non importa da dove hai preso il principio Spring Security. Si preoccupa solo se il principale ha i giusti ruoli / ambiti richiesti dal Sicurezza di primavera OAuth client. Quindi, non c'è motivo per cui non sia possibile utilizzare Spring Social per connettersi in modo sicuro a Facebook, utilizzare Spring Social Security per avere tale connessione creare un oggetto di autenticazione Spring Security e quindi utilizzare Spring Security OAuth per proteggere qualsiasi accesso alla TUA API, che a sua volta potrebbe connettersi in modo sicuro all'API di Facebook dietro le quinte. I client utilizzerebbero il token di accesso OAuth per la TUA API, non Facebook. Che viene gestito nel servizio.
 4
Author: Josh Long, 2013-07-15 22:14:57