web-dev-qa-db-ja.com

クライアントとリソースサーバーのSpringOAuth2XML構成

私の春のアプリケーションをOAuth2/OIDCリソースサーバーとして、またcilentとして機能させるために、XMLの非常に基本的な構成を手伝ってくれる人はいますか?.

私が持っているものは?

Spring SecuirityLDAP認証を備えたSpringWebMVCアプリケーション。

私が達成したいことは?

  1. ユーザーがアプリケーション内のリソース(index.htmlなど)にアクセスしようとすると、資格情報の入力を求められる必要があります(ポップアップまたはログインページへのリダイレクトの場合があります)。
  2. アプリケーションはサードパーティの認証サーバーに接続し、OAuth2アクセストークンと更新トークンを取得する必要があります。
  3. アクセストークンを受信すると、アプリケーションはセッションを作成し、最初のステップで要求された必要なリソースを提供する必要があります。
  4. ユーザーがログアウトをクリックするか、セッションが期限切れになると、フローは最初のステップから始まります。

これまでに試したことはありますか?

SpringBootとOIDCでこれを試しました。しかし、私はXML構成で上記を達成するためのいくつかの良いリファレンスを探しています。 SpringBootやJava構成)は使用できないことに注意してください。

これらすべてを開始する方法に関するアイデアや提案はありますか?

ありがとう。

5
Agam

まず、良い例は 春のoAuthサンプル セクション)にあると言わなければなりません。

とにかく、しばらく前に遊んだときに oAuth-sample-project(GitHub) を作成したので、ここに興味深い部分があります。ドキュメントから少し学ぶ必要があることを考慮に入れて、コードをドリルインしてください...しかし、それは出発点としては良いと思います。

クライアントXML:

<sec:http authentication-manager-ref="authenticationManager">
    <sec:intercept-url pattern="/secure/**" access="ROLE_USER" />
    <sec:anonymous/>

    <!-- sec:form-login/-->

    <sec:form-login 
        login-page="/login/login.htm" 
        authentication-failure-url="/login/login.htm?login_error=1" />


    <sec:custom-filter ref="oauth2ClientFilter" after="EXCEPTION_TRANSLATION_FILTER" />
</sec:http>


<sec:authentication-manager alias="authenticationManager">
    <sec:authentication-provider user-service-ref="userDetailsService"/>
</sec:authentication-manager>

<sec:user-service id="userDetailsService">
    <sec:user name="admin"  password="admin"  authorities="ROLE_USER,ROLE_ADMIN" />
</sec:user-service>



<!--apply the oauth client context-->
<oauth:client   id="oauth2ClientFilter" />


<oauth:resource id="butkecResource"
                type="authorization_code"
                client-id="${oauth2.client.id}"
                client-secret="${oauth2.client.secret}"
                access-token-uri="${oauth2.client.accessTokenUri}"
                user-authorization-uri="${oauth2.client.userAuthorizationUri}"
                scope="read"/>

<!--define an oauth2 resource for facebook. according to the facebook docs, the 'client-id' is the App ID, and the 'client-secret' 
    is the App Secret -->
<oauth:resource id="facebook" 
    type="authorization_code" 
    client-id="233668646673605" 
    client-secret="33b17e044ee6a4fa383f46ec6e28ea1d"
    authentication-scheme="query" 
    access-token-uri="https://graph.facebook.com/oauth/access_token" 
    user-authorization-uri="https://www.facebook.com/dialog/oauth"
    token-name="oauth_token" 
    client-authentication-scheme="form" />

完全なスニペットは ここ です。

リソースサーバーXML:

<security:http pattern="/index.html" security="none"/>
<security:http pattern="/browse" security="none"/>
<!-- security:http pattern="/welcome" security="none"/-->
<security:http pattern="/js/**" security="none"/>

<security:http  entry-point-ref="oauthAuthenticationEntryPoint"     
                access-decision-manager-ref="accessDecisionManager">
    <security:intercept-url pattern="/**" access="IS_AUTHENTICATED_FULLY" />
    <security:custom-filter ref="resourceServerFilter" before="PRE_AUTH_FILTER" />
    <security:access-denied-handler ref="oauthAccessDeniedHandler" />
    <security:anonymous />
</security:http>
...
...
<oauth:resource-server id="resourceServerFilter" 
                    token-services-ref="tokenServices" />


<bean id="tokenServices" class="org.springframework.security.oauth2.provider.token.DefaultTokenServices" >
    <property name="tokenStore" ref="tokenStore" />
</bean>


<bean id="tokenStore" class="com.ohadr.oauth.resource_server.token.MyTokenStore" />


<bean id="oauthAuthenticationEntryPoint" class="org.springframework.security.oauth2.provider.error.OAuth2AuthenticationEntryPoint">
    <property name="realmName" value="butkec" />
</bean>

ファイルが見つかります ここ

ここはすべてのビットとバイトを説明するのに適した場所ではないと思いますが、ここでも Spring docs で素晴らしいものを見つけることができます説明(私はそこからすべてを学ぶことができました...)

1
OhadR