2013-05-17 13 views
9

Verwenden von spring-security-oauth2 zum Sichern meiner Ressourcen gegen einen SSO-Endpunkt, der als Autorisierungsserver fungieren kann. Ich bin ein wenig verwirrt, wenn die Dokumentation heißt es:Was ist der richtige Weg, um den Resource Server und den Authorization Server zu trennen?

Der Anbieter Rolle in OAuth 2.0 tatsächlich zwischen Authorization Service und Ressourcenservice aufgeteilt wird, und während diese manchmal in derselben Anwendung befinden, mit Spring Security OAuth Sie haben die Option, um sie auf zwei Anwendungen aufzuteilen und mehrere Ressourcendienste mit einem Autorisierungsdienst zu verwenden.

Aber ich glaube nicht, dass ich ein Beispiel dafür gefunden habe. In sparklr/ton befinden sich der Autorisierungsserver und der Ressourcenserver in derselben Anwendung. Das einzige Beispiel, das ich von der Suche gesehen habe, ist this spring-servlet.xml, die erfordert this benutzerdefinierte Implementierung von ResourceServerTokenServices zu arbeiten.

Ich würde es gerne vermeiden, eine benutzerdefinierte Implementierung von ResourceServerTokenServices wenn überhaupt möglich zu schreiben. Gibt es eine andere Möglichkeit, einen externen Autorisierungsserver in einem Ressourcenserver zu unterstützen? Etwas in der Art von:

<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" /> 

Ist das möglich?

* BEARBEITEN: Ich werde das als eine Umgehungsmöglichkeit hinzufügen (oder vielleicht ist dies die beabsichtigte Lösung) Ich verwende einen JDBC-Token-Speicher und verlässt sich auf die Tatsache, dass beide Server Zugriff auf diese Datenbank haben.

+1

Wie wird das Ergebnis der Suche? Ich fange an, das gleiche Problem zu stellen, und jeder Rat würde sehr geschätzt werden. – beku8

+2

Das Ergebnis ist genau das, wonach ich suche. Solange Sie einen 'JdbcTokenStore' angeben, der sowohl für den Ressourcenserver als auch für den Autorisierungsserver auf die gleiche 'DataSource' zeigt, scheint es gut zu funktionieren. – Joe

+1

Ich habe die Authentifizierungs- und Ressourcenserver getrennt. Die Testfälle sind jedoch nicht vollständig. Sie können es hier finden https://github.com/nareshbafna/oauth2 – anfab

Antwort

0

können Sie offene Ressourcen trennen und geschützte Ressourcen im Frühjahr-security.xml

Muster/api/** wird und andere Ressourcen sind offen geschützt werden.

<!-- 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> 
Verwandte Themen