Spring security 什么';分离资源服务器和授权服务器的正确方法是什么?

Spring security 什么';分离资源服务器和授权服务器的正确方法是什么?,spring-security,oauth-2.0,Spring Security,Oauth 2.0,使用spring-security-oauth2针对可以充当授权服务器的SSO端点保护我的资源。当文档中指出: OAuth 2.0中的提供者角色实际上是在授权服务和资源服务之间划分的,虽然它们有时驻留在同一个应用程序中,但使用Spring Security OAuth,您可以选择将它们划分到两个应用程序中,也可以选择共享一个授权服务的多个资源服务 但我认为我还没有找到这样的例子。在Sparkr/tonr中,授权服务器和资源服务器位于同一应用程序中。我从搜索中看到的唯一一个例子是,它需要Resou

使用spring-security-oauth2针对可以充当授权服务器的SSO端点保护我的资源。当文档中指出:

OAuth 2.0中的提供者角色实际上是在授权服务和资源服务之间划分的,虽然它们有时驻留在同一个应用程序中,但使用Spring Security OAuth,您可以选择将它们划分到两个应用程序中,也可以选择共享一个授权服务的多个资源服务

但我认为我还没有找到这样的例子。在Sparkr/tonr中,授权服务器和资源服务器位于同一应用程序中。我从搜索中看到的唯一一个例子是,它需要
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令牌存储,并依赖于两台服务器恰好都可以访问该数据库的事实。

您可以在spring-security.xml中分离开放资源和受保护资源

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


对于可能感兴趣的人,这里还有另一个分离身份验证服务器和资源服务器的示例:

结果如何?我开始面临同样的问题&任何建议都将不胜感激。结果正是我想要的。只要为资源服务器和授权服务器指定一个指向同一数据源的
JdbcTokenStore
,它就可以正常工作。我已经将auth和资源服务器分开了。不过,测试用例并不完整。你可以在这里找到它,我认为你应该定义另一个授权服务器,如果你是通过facebook或Google进行身份验证的用户。我也在寻找正确的方法来拆分授权服务器和资源服务器,尽管文档并没有涵盖它的所有内容。如果任何人有任何例子或来源将不胜感激。