9

In Spring Boot application mi sono assicurato i miei endpoint Spring MVC REST con Spring Security e Spring OAuth2. Dispongo di propri server di autorizzazione \ Resource, quindi per poter comunicare con la nostra API, il client (AngularJS) deve ottenere acessToken dal mio server di autorizzazione API.Rest, Spring possiede il server OAuth2 + provider OAuth2 come Facebook, Google, Yahoo

Tutto funziona correttamente ma per l'autenticazione/autorizzazione sulla mia API, l'utente deve creare il suo account e fornirci il suo nome utente/password.

Mi piacerebbe semplificare questo processo e vorrei proporre all'utente di autenticarsi sulla mia API tramite Google/Facebook/Twitter o provider di Au.

In questo momento non ho una chiara comprensione di come deve funzionare .. Ad esempio una delle mie idee - Facebook pubblicherà il proprio accessToken e passerà di nuovo alla mia API. Sulla base di questo accesso, la mia API emetterà il proprio accessToken e lo riporterà all'applicazione client (AngularJS). O dovrei passare l'accesso a Facebook direttamente all'app del cliente?

Qual è l'architettura corretta per il caso descritto? Come dovrebbe funzionare?

Forse c'è qualche esempio che dimostra questa architettura basata sul framework Spring?

risposta

4

Se si desidera delegare l'autenticazione a un provider esterno, è possibile utilizzare OAuth2ClientAuthenticationProcessingFilter o le annotazioni di convenienza e la configurazione esterna fornite in Spring Cloud Security. Esempio (dalla home page Cloud Security Primavera):

Aplication.java:

@SpringBootApplication 
@EnableOAuth2Sso 
public class Application { 
    ... 
} 

application.yml:

spring: 
    oauth2: 
    client: 
     clientId: bd1c0a783ccdd1c9b9e4 
     clientSecret: 1a9030fbca47a5b2c28e92f19050bb77824b5ad1 
     accessTokenUri: https://github.com/login/oauth/access_token 
     userAuthorizationUri: https://github.com/login/oauth/authorize 
     clientAuthenticationScheme: form 
    resource: 
     userInfoUri: https://api.github.com/user 
     preferTokenInfo: false 

che funziona con GitHub se la vostra applicazione è in esecuzione sulla porta 8080 (Credo). La configurazione simile funziona con Facebook, cloud foundry, google e altri provider OAuth2.

+1

grazie per la risposta. Sembra fantastico, proverò questo solutone oggi dalla mia macchina di casa! Una domanda: funzionerà insieme al mio AuthServer OAuth2 implementato tramite Spring OAuth? – alexanoid

+0

Dovrebbe funzionare con qualsiasi fornitore oauth2. Ma non impostare 'clientAuthenticationScheme' per un provider Spring (è disattivato nel server per impostazione predefinita). –

+2

Grazie, voglio dire che ho già il mio server OAuth2 all'interno di questa applicazione (questo server OAuth2 fa parte di questa applicazione). E in aggiunta a questo metodo di autenticazione mi piacerebbe aggiungere provider Oauth2 esterni. Quindi funzionerà in questo caso? – alexanoid

1

In caso di token OAuth2 o OAuth2 + JWT personali, dare un'occhiata alla seguente domanda Integrate Spring Security OAuth2 and Spring Social in particolare la risposta fornita da @rbarriuso. Devi fornire il tuo SocialAuthenticationSuccessHandler e inviare un reindirizzamento con il proprio oauth2Token dopo l'autorizzazione con successo con qualsiasi provider OAuth2 di terze parti. In altre parole, l'idea principale di questa soluzione agnostica della tecnologia è quella di emettere il proprio token di accesso e fornirlo all'utente dopo la sua autenticazione con successo con i provider OAuth2 di terze parti.

Problemi correlati