2013-05-17 52 views
9

使用spring-security-oauth2来保护我的资源免受可充当授权服务器的SSO端点的影响。我有点困惑时,文档指出:将资源服务器和授权服务器分开的正确方法是什么?

中的OAuth 2.0提供者的角色实际上是授权服务和资源服务之间的分裂,而这些有时会驻留在同一个应用程序,使用Spring Security的OAuth你有选项将它们分成两个应用程序,并且还有多个共享授权服务的资源服务。

但我不认为我发现了这种情况的例子。在sparklr/tonr中,授权服务器和资源服务器驻留在同一个应用程序中。我从搜索中看到的唯一示例是this spring-servlet.xml,这需要this定制实现ResourceServerTokenServices才能正常工作。

如果可能的话,我想避免写一个自定义实现ResourceServerTokenServices。是否有另一种方法可以在资源服务器中支持外部授权服务器?沿线的东西:

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

这可能吗?编辑:我将添加为解决方法(或者这可能是预期的解决方案)我正在使用jdbc令牌存储,并依靠这两个服务器碰巧有权访问该数据库的事实。

+1

怎样的结果来看?我开始面对同样的问题,任何建议将不胜感激。 – beku8

+2

结果正是我要找的。只要你为资源服务器和授权服务器指定了一个指向相同'DataSource'的'JdbcTokenStore',它就好像工作得很好。 – Joe

+1

我已经分离了auth和资源服务器。尽管如此,测试用例并不完整。你可以在这里找到它https://github.com/nareshbafna/oauth2 – anfab

回答

0

您可以在弹簧的security.xml独立的开放资源和保护资源

模式/ API/**将受到保护和其他资源将被打开。

<!-- 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> 
相关问题