2013-05-17 13 views
9

Używanie spring-security-oauth2 do zabezpieczenia moich zasobów przed punktem końcowym SSO, który może działać jako serwer autoryzacji. Jestem nieco zdezorientowany, gdy dokumentacja stanowi:Jaki jest właściwy sposób na oddzielenie serwera zasobów i serwera autoryzacji?

Rola dostawcą w OAuth 2.0 jest faktycznie podzielone między usługą autoryzacji i użyteczności zasobów, a jednocześnie te czasem przebywania w tym samym wniosku, ze sprężyną bezpieczeństwa OAuth masz możliwość podzielenia ich na dwie aplikacje, a także posiadanie wielu usług zasobów, które współdzielą usługę autoryzacji.

Ale nie sądzę, że znalazłem przykład tego zdarzenia. W sparklr/tonr serwer autoryzacji i serwer zasobów znajdują się w tej samej aplikacji. Jedyny przykład, który widziałem po przeszukaniu, to this spring-servlet.xml, który wymaga this wykonania niestandardowego ResourceServerTokenServices do pracy.

Chciałbym uniknąć pisania niestandardowej implementacji ResourceServerTokenServices, jeśli w ogóle możliwe. Czy istnieje inny sposób na obsługę zewnętrznego serwera autoryzacji na serwerze zasobów? Coś w rodzaju:

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

Czy to możliwe?

* EDYCJA: Dodam, że jako obejście (lub może to jest zamierzone rozwiązanie) używam magazynu znaczników jdbc i polegając na fakcie, że oba serwery mają dostęp do tej bazy danych.

+1

Jak wynika patrzy? Zaczynam stawiać czoła temu samemu problemowi i każda rada byłaby bardzo cenna. – beku8

+2

Rezultat jest dokładnie tym, czego szukam. Tak długo jak określasz 'JdbcTokenStore' wskazujący na to samo' DataSource' zarówno dla serwera zasobów, jak i serwera autoryzacji, wydaje się działać dobrze. – Joe

+1

Oddzieliłem serwer uwierzytelniania i serwer zasobów. Przypadki testowe nie są jednak kompletne. Możesz go znaleźć tutaj https://github.com/nareshbafna/oauth2 – anfab

Odpowiedz

0

można oddzielić otwartych zasobów i chronionych zasobów w wiosenno-security.xml

Wzór/api/** będą chronione i inne zasoby będą otwarte.

<!-- 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> 
Powiązane problemy