読者の皆様へ: あなたのリクエストに応じて、大切な情報を見逃すことなく、ノイズを減らす機能を開発しました。お気に入りのトピックを選択して、メールとウェブで通知をもらいましょう。
SpringOne Platform Conferenceに先立って、Pivotalの面々が、2015年3月のSpring Security 4.0.0以来初のメジャーリリースとなるSpring Security 5.0.0をリリースした。
2004年にAcegiという名称でスタートしたSpring Securityは現在、Pivotalのエンジニアであり、Packt出版のSpring SecurityおよびSpring Security 3.1セミナブックの共著者であるRobert Winch氏が中心となって開発されている。5.0.0リリースには、OAuth 2.0のサポート、Spring WebFluxを含むリアクションサポート、Project ReactorのStepVerifierによるテストなど、400を超える機能強化とバグ修正が含まれる。
リーダのRob Winch氏に、今回のリリースと今後について話を聞いた。
InfoQ: 今回のアップデートはかなりしっかりしたものですが、リリースの内容を要約して頂けますか?
Winch: JDK 8以降が必須要件になったこと、Reactive Security、OAuth 2.0ログイン(OIDC)、Modernized Password Storageなどが主な内容です。
InfoQ: Modern Password Storageのテーマと実装は、どのようなアイデアによるものなのでしょう?
Winch: 残念なことですが、Spring Security 5.0までのデフォルトのパスワードストレージはプレーンテキストで、安全ではなかったのです。今回はメジャーリリースだったので、もっと安全なデフォルトに切り替えるチャンスでした。
幸運なことに、パスワード保存の専門家であるJohn Steven氏の協力を得ることができました。彼はOWASP Password Storage Cheat Sheetの中心的な開発者のひとりなのです。氏の協力によって、今日のパスワード保存の推奨に従ったデフォルト実装を提供できるようになりました。さらに、別のメカニズムに変更することも可能です。
InfoQ: 今回のリリースで最も印象的なのは、Springがいつも、私が見落としていたものを確実に提供しているように思われることです。機能の選択や優先順位の設定はどのようにしているのですか?
Winch: 要求の多い問題点を選択し、ポートフォリオ全体のテーマを設定することによって、コミュニティの動向を追いかけるようにしています。今回のテーマはJDK 8を最低要件とする変更と、Project Reactorを使ったReactiveのサポートです。
InfoQ: SpringのリーダであるJuergen Hoeller氏が、“用意のできたもの(what’s ready)”をより短いインターバルでリリースするというSpring全体の方針を説明していますが、Spring Securityのリリースサイクルを短縮する予定はありますか?
Winch: そうですね、Spring Frameworkのリリースサイクルに従って、Spring Frameworkの提供するセキュリティを確保したいと思っています。
InfoQ: 次のリリースでは何を予定していますか?
Winch: 次回のリリースでは、ReactiveとOAuthログインサポートの向上に重点を置く予定です。既存のパスワードの保存方法から移行するためのフックも提供したいと思っています。OAuth Resource Serverサポートの初期バージョンもリリースしたいですね。
Method Securityがどのように拡張されたかを見てみよう(例はSping Security Webサイトより)。
任意の@Configuration
インスタンスに対して、@EnableGlobalMethodSecurity
アノテーションでアノテーションベースのセキュリティを有効にすることにより、メソッドへのアクセスを制限できる。次の例では、Spring Securityの@Secured
アノテーションが有効になる。
@Configuration
@EnableGlobalMethodSecurity(securedEnabled = true)
public class MethodSecurityConfig {
// ...
}
メソッドレベルでアノテーションを適用することも可能だ。
public interface BankService {
@Secured("IS_AUTHENTICATED_ANONYMOUSLY")
public Account readAccount(Long id);
@Secured("IS_AUTHENTICATED_ANONYMOUSLY")
public Account[] findAccounts();
@Secured("ROLE_TELLER")
public Account post(Account account, double amount);
}
GlobalMethodSecurity
が提供するものよりも、さらに柔軟な設定が必要な場合もある。そのような場合、Spring Security 5.0では、 GlobalMethodSecurityConfiguration
を拡張するconfigクラスを作成し、@EnableGlobalMethodSecurity
アノテーションを追加することで、独自の実装を提供する機能を導入している。
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration {
@Override
protected MethodSecurityExpressionHandler createExpressionHandler() {
// ... create and return custom MethodSecurityExpressionHandler ...
return expressionHandler;
}
}
Reactorのリアクティブストリームの特徴のひとつに、単一の待機スレッドを新しいジョブに割り当てることができる、というものがある。このため、ThreadLocalタイプのマッピングの実装に新たな問題が発生する。Reactorはこの問題に、リアクティブなTheradLocalマップであるリアクティブContext APIで対処している。
5.0では、スタティックなReactiveSecurityContextHolder.getContext()
メソッド経由でリアクティブなContext
にアクセスできる。これにより、メソッド呼び出しの間でセキュリティトークン(その他アプリケーション独自のデータ)を受け渡すことが可能になる。
この記事を評価
- 編集者評
- 編集長アクション