2013-05-17 14 views
9

Utilizzo di spring-security-oauth2 per proteggere le risorse da un endpoint SSO che può fungere da server di autorizzazione. Sono un po 'confuso quando la documentazione afferma:Qual è il modo corretto per separare il server di risorse e il server di autorizzazione?

Il ruolo di fornitore di OAuth 2.0 è in realtà diviso tra il servizio di autorizzazione e di servizio delle risorse, e mentre questi a volte risiedono nella stessa applicazione, con Primavera di sicurezza OAuth si ha la possibilità di suddividerli su due applicazioni e di disporre di più servizi di risorse che condividono un servizio di autorizzazione.

Ma non credo di aver trovato un esempio di ciò che sta accadendo. In sparklr/tonr il server di autorizzazione e il server di risorse risiedono nella stessa applicazione. L'unico esempio che ho visto dalla ricerca è this spring-servlet.xml, che richiede l'implementazione personalizzata this di ResourceServerTokenServices per funzionare.

Vorrei evitare di scrivere un'implementazione personalizzata di ResourceServerTokenServices se possibile. C'è un altro modo per supportare un server di autorizzazione esterno in un server delle risorse? Qualcosa sulla falsariga di:

<bean class="com.example.ExternalAuthorizationServerTokenServices" 
    p:remote-url="https://my-oauth-compatible-sso.com" 
    p:token-endpoint="/oauth/access_token" 
    p:authorize-endpoint="/oauth/authorize" /> 

È possibile?

* EDIT: Aggiungerò che come soluzione alternativa (o forse questa è la soluzione prevista) Sto usando un token store jdbc e baso sul fatto che entrambi i server hanno accesso a quel database.

+1

Come è il risultato cercando? Sto iniziando ad affrontare lo stesso problema e ogni consiglio sarebbe molto apprezzato. – beku8

+2

Il risultato è esattamente quello che sto cercando. Finché si specifica che 'JdbcTokenStore' ha indicato lo stesso' DataSource' sia per il server delle risorse che per il server di autorizzazione, sembra funzionare correttamente. – Joe

+1

Ho separato l'auth e i server delle risorse. Tuttavia, i casi di test non sono completi. Puoi trovarlo qui https://github.com/nareshbafna/oauth2 – anfab

risposta

0

È possibile separare le risorse aperte e risorse protette nella primavera-security.xml

Pattern/api/** verrà protette e altre risorse saranno aperti.

<!-- Protected resources --> 
    <http pattern="/api/**" create-session="never" use-expressions="true" 
     entry-point-ref="oauthAuthenticationEntryPoint" 
     access-decision-manager-ref="accessDecisionManager" 
     xmlns="http://www.springframework.org/schema/security"> 
     <anonymous enabled="false" /> 
     <intercept-url pattern="/api/**" 
      access="hasAnyRole('ROLE_USER','ROLE_ADMIN')" /> 
     <custom-filter ref="resourceServerFilter" before="PRE_AUTH_FILTER" /> 
     <!-- <access-denied-handler ref="oauthAccessDeniedHandler"/> --> 
     <access-denied-handler ref="oauthAccessDeniedHandler" /> 
    </http> 
Problemi correlati