1概要

このチュートリアルでは、Springでダイジェスト認証を設定、構成、カスタマイズする方法を説明します。前のリンクと同様に、/spring-security-basic-authentication[基本認証をカバーする記事]で、Spring MVCチュートリアルをベースに構築し、Spring Securityが提供するDigest Authメカニズムを使用してアプリケーションを保護します。


2セキュリティXML設定

設定について最初に理解しておくべきことは、Spring Securityはダイジェスト認証メカニズムをすぐに使えるサポートをしていますが、このサポートは基本認証のように名前空間に統合されていないことです。

この場合、セキュリティ設定を構成する予定のraw Bean ** を手動で定義する必要があります –

DigestAuthenticationFilter



DigestAuthenticationEntryPoint

<beans:bean id="digestFilter"
  class="org.springframework.security.web.authentication.www.DigestAuthenticationFilter">
    <beans:property name="userDetailsService" ref="userService"/>
    <beans:property name="authenticationEntryPoint" ref="digestEntryPoint"/>
</beans:bean>
<beans:bean id="digestEntryPoint"
  class="org.springframework.security.web.authentication.www.DigestAuthenticationEntryPoint">
    <beans:property name="realmName" value="Contacts Realm via Digest Authentication"/>
    <beans:property name="key" value="acegi"/>
</beans:bean>

<!-- the security namespace configuration -->
<http use-expressions="true" entry-point-ref="digestEntryPoint">
    <intercept-url pattern="/** ** " access="isAuthenticated()"/>

    <custom-filter ref="digestFilter" after="BASIC__AUTH__FILTER"/>
</http>

<authentication-manager>
    <authentication-provider>
        <user-service id="userService">
            <user name="user1" password="user1Pass" authorities="ROLE__USER"/>
        </user-service>
    </authentication-provider>
</authentication-manager>

+次に、これらのBeanを全体的なセキュリティ設定に統合する必要があります。この場合、名前空間はそれを可能にするのに十分柔軟です。

この最初の部分は、メインの

<http>

要素の

entry-point-ref

属性を介してカスタムエントリポイントBeanを指しています。

2番目の部分は、新たに定義されたダイジェストフィルタをセキュリティフィルタチェーンに追加することです。このフィルタは

BasicAuthenticationFilter

と機能的に同等なので、チェーン内の同じ相対位置を使用します。これは全体のhttp://static.springsource.org/spring-security/site/docs/3.1の

BASIC

AUTH

FILTER

エイリアスで指定されます.x/reference/ns-config.html#ns-custom-filters[Spring Securityの標準フィルタ]。

最後に、ダイジェストフィルタがユーザサービスBeanを指すように設定されていることに注意してください。 > __要素:

<user-service id="userService">


3保護されたアプリケーションを使用する

保護されたアプリケーションを消費し、クライアントがどのようにそれと対話できるかを理解するために、


curl

コマンド

を使用します。

まずは、ホームページにリクエストすることから始めましょう。

curl -i http://localhost/spring-security-mvc-digest-auth/homepage.html

予想通り、

401 Unauthorized

ステータスコードでレスポンスが返されます。

HTTP/1.1 401 Unauthorized
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=CF0233C...; Path=/spring-security-mvc-digest-auth/; HttpOnly
WWW-Authenticate: Digest realm="Contacts Realm via Digest Authentication", qop="auth",
  nonce="MTM3MzYzODE2NTg3OTo3MmYxN2JkOWYxZTc4MzdmMzBiN2Q0YmY0ZTU0N2RkZg=="
Content-Type: text/html;charset=utf-8
Content-Length: 1061
Date: Fri, 12 Jul 2013 14:04:25 GMT

この要求がブラウザによって送信された場合、認証確認は単純なユーザー/パスワードダイアログを使用してユーザーに資格情報を要求します。

それでは

正しい資格情報を入力して

もう一度リクエストを送信しましょう。

curl -i --digest --user
   user1:user1Pass http://localhost/spring-security-mvc-digest-auth/homepage.html


curl

コマンドで

– digest

フラグを使用してダイジェスト認証を有効にしていることに注意してください。

サーバーからの最初の応答は同じ –

401 Unauthorized

– になりますが、チャレンジは2番目の要求によって解釈され、対処されます –

200 OK

が成功します。

HTTP/1.1 401 Unauthorized
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=A961E0D...; Path=/spring-security-mvc-digest-auth/; HttpOnly
WWW-Authenticate: Digest realm="Contacts Realm via Digest Authentication", qop="auth",
  nonce="MTM3MzYzODgyOTczMTo3YjM4OWQzMGU0YTgwZDg0YmYwZjRlZWJjMDQzZWZkOA=="
Content-Type: text/html;charset=utf-8
Content-Length: 1061
Date: Fri, 12 Jul 2013 14:15:29 GMT

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=55F996B...; Path=/spring-security-mvc-digest-auth/; HttpOnly
Content-Type: text/html;charset=ISO-8859-1
Content-Language: en-US
Content-Length: 90
Date: Fri, 12 Jul 2013 14:15:29 GMT

<html>
<head></head>

<body>
    <h1>This is the homepage</h1>
</body>
</html>

このやりとりについての最後の注意は、クライアントは最初のリクエストで正しい

Authorization

ヘッダーを先取りして送信することができるため、サーバーセキュリティの課題と2番目のリクエストを完全に回避できることです。


4 Mavenの依存関係

セキュリティの依存関係については、/spring-security-with-maven[Spring Security Mavenチュートリアル]のリンクで詳しく説明しています。つまり、

pom.xml

で依存関係として

spring-security-web



spring-security-config

を定義する必要があります。


5結論

このチュートリアルでは、フレームワークのダイジェスト認証サポートを利用して、単純なSpring MVCプロジェクトにセキュリティを紹介します。

これらの例の実装はhttps://github.com/eugenp/tutorials/tree/master/spring-security-mvc-digest-auth#readme[githubプロジェクト]にあります。インポートしてそのまま実行するのは簡単なはずです。

プロジェクトがローカルで実行されている場合、ホームページのHTMLにアクセスすることができます(または、最小限のTomcat構成では、ポート80で)。

最後に、アプリケーションがリンクする必要がある理由は何もありません。 Webアプリケーションを使用するときにクライアントが2つのメカニズムから選択できるように、同じURI構造** 上