9

spring-security-oauth2 を使用して、認可サーバーとして機能できる SSO エンドポイントに対してリソースを保護します。ドキュメントに次のように記載されている場合、私は少し混乱しています。

OAuth 2.0 でのプロバイダーの役割は、実際には認可サービスとリソース サービスに分割されています。これらは同じアプリケーションに存在する場合もありますが、Spring Security OAuth を使用すると、それらを 2 つのアプリケーションに分割し、複数のリソース サービスを共有することもできます。認可サービス。

しかし、私はこれが起こっている例を見つけたとは思いません。sparklr/tonr では、認可サーバーとリソース サーバーは同じアプリケーション内にあります。検索で見た唯一の例は、この spring-servlet.xmlであり、このカスタム実装が機能する必要があり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" />

これは可能ですか?

*EDIT:回避策として追加します(または、これが意図した解決策かもしれません)。私はjdbcトークンストアを使用しており、両方のサーバーがたまたまそのデータベースにアクセスできるという事実に依存しています。

4

2 に答える 2

0

興味があるかもしれない人のために、認証サーバーとリソースサーバーを分離する別の例もここにあります: https://github.com/sharmaritesh/spring-angularjs-oauth2-sample

于 2016-02-12T12:34:21.910 に答える
0

spring-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>
于 2015-05-15T06:55:43.060 に答える