Spring Securityダイジェスト認証
1. 概要
このチュートリアルでは、Springでダイジェスト認証を設定、構成、カスタマイズする方法を示します。 前のarticle covering Basic Authenticationと同様に、Spring MVCチュートリアルの上に構築し、SpringSecurityが提供するダイジェスト認証メカニズムでアプリケーションを保護します。
2. セキュリティXML構成
構成について最初に理解することは、Spring Securityはダイジェスト認証メカニズムを完全にサポートしていますが、このサポートは基本認証と同様にnot as well integrated into the namespaceであるということです。
この場合、セキュリティ構成を構成するdefine the raw beansを手動で作成する必要があります–DigestAuthenticationFilterとDigestAuthenticationEntryPoint:
次に、これらのBeanをセキュリティ構成全体に統合する必要があります。この場合、名前空間はそれでも十分な柔軟性を備えています。
この最初の部分は、メインの<http>要素のentry-point-ref属性を介して、カスタムエントリポイントBeanを指しています。
2番目の部分はadding the newly defined digest filter into the security filter chainです。 このフィルターは機能的にBasicAuthenticationFilterと同等であるため、チェーン内で同じ相対位置を使用しています。これは、全体のSpring Security Standard FiltersのBASIC_AUTH_FILTERエイリアスによって指定されます。
最後に、ダイジェストフィルターがpoint to the user service beanに構成されていることに注意してください。ここでも、<user-service>要素によって作成されたデフォルトのユーザーサービスのBean名を指定できるため、名前空間は非常に便利です。
3. 保護されたアプリケーションの消費
the curl commandを使用して、セキュリティで保護されたアプリケーションを使用し、クライアントがアプリケーションと対話する方法を理解します。
ホームページをリクエストすることから始めましょう–リクエストのwithout providing security credentials:
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
この要求がブラウザによって送信された場合、認証チャレンジは、単純なユーザー/パスワードダイアログを使用してユーザーに資格情報を要求します。
provide the correct credentialsにして、リクエストをもう一度送信しましょう。
curl -i --digest --user
user1:user1Pass http://localhost/spring-security-mvc-digest-auth/homepage.html
–digestフラグを介してcurlコマンドのダイジェスト認証を有効にしていることに注意してください。
サーバーからの最初の応答は同じ(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
This is the homepage
この相互作用に関する最後の注意点は、クライアントは最初の要求でpreemptively send the correct Authorization headerを実行できるため、完全にavoid the server security challengeと2番目の要求で実行できるということです。
4. Mavenの依存関係
セキュリティの依存関係については、Spring Security Maven tutorialで詳しく説明しています。 つまり、spring-security-webとspring-security-configをpom.xmlの依存関係として定義する必要があります。
5. 結論
このチュートリアルでは、フレームワークのダイジェスト認証サポートを活用して、簡単なSpring MVCプロジェクトにセキュリティを導入します。
これらの例の実装はthe github projectにあります。これはEclipseベースのプロジェクトであるため、そのままインポートして実行するのは簡単です。
プロジェクトがローカルで実行されると、ホームページhtmlにアクセスできます(または、最小限のTomcat構成で、ポート80で)。
最後に、クライアントがWebアプリケーションを使用するときに2つのメカニズムのどちらかを選択できるように、アプリケーションがchoose between Basic and Digest authentication –both can be set up simultaneously on the same URI structureを実行する必要がある理由はありません。