SpringFest2018の「Amazon Cognito使って認証したい?それならSpring Security使いましょう!」聴講メモ

プレゼンター

内立 良介 コイニー株式会社 日本Javaユーザーグループ

Springを使って決済系サービスを開発しているユニセックス系エンジニア。基本的にJava書いてますが、golangかじったり、Vue.jsと戯れたりもしています。お酒が好き、服が好き!

概略

本セッションでは、デフォルトで入っているFORM認証の実装からAmazon Cognitoを使った独自認証、認可の実装まで、どういう流れで認証、認可が行われているかの説明を交えながら紹介します。Spring Security Testの話もします。Amazon Cognitoの仕様に基づいた内容が一部ありますが、汎用的に使える内容になっているかと思います。「スプリングセキュリティコワイ」を少しでもなくしましょう。 #sf_23 #アンケート

聴講メモ

Spring Securityとは

  • モジュール郡
    • Core ( 認証と認可 )
    • Web ( Webアプリのセキュリティ対策 )
    • Config ( XMLネームスペース JavaConfigをサポート)
  • ユーザ ⇔ Filter Chain Proxy ⇔ Security Filter Chain ⇔ アプリ
  • Security Filterの詳細
    • Lgout Filter
    • Annoymous Authentication Filter
    • Basic Authentication Filter
  • 認証
    • spring-security-web ( Authentication Filter ) ⇔ spring-security-core ( Authentication Manager, Authentication Provider )
  • 認可
    • spring-security-web ( Exception Translation Filter, Filter Security Inteceptor ) ⇔ spring-security-core ( Access Decisition Managerの実装, Access Decistion Voterの実装 )
    • AccessDecistionVoter.javaはWebExpressionVoter.javaがデフォルトの処理を適用
    • AffirmativeBased.java
      • Voterの一人でも賛成なら、アクセス権限を付与
    • ConsensusBased.java
      • Voterが過半数賛成なら、アクセス権限を付与
    • UnanimousBased.java
      • Voterの全員が賛成なら、アクセス権限を付与

FORM認証機能の実装

  • 設定クラスと資格情報取得用のServiceのみを実装

Spring Security と Amazon Cognito

Cognito認証実装

  • ID, パスワード認証

Spring Securityのテスト

  • FORM認証のテスト
    • SecurityMockMvcRequestBuilder#formLogin
  • ROLEで制限を与えられているかどうかのテスト

おまけ ( メソッドセキュリティ )

  • メソッドに対してアノテーションをつけるだけでアクセス制御
  • @PreAuthorize
    • メソッドに入る前にチェック処理を行う
    • だめならAccessDeniedExceptionがスロー
  • @PostAuthorize
    • メソッド通過後に戻り値に対してチェック処理を行う
    • だめならAccessDeniedExceptionがスロー
  • @PreFilter
    • メソッドに入る前に引数の中で条件に一致するオブジェクトのみをフィルタリング
  • @PostFilter
    • 条件に一致するもののみ戻り値をチェック

Twitterの反応

スライドの絵が可愛いとのことで、使ってるらしいツールが紹介されてました * https://twitter.com/b1a9idps/status/1057542465844994048 * SIMPLEDIAGRAMS

Spriong Securityが怖い人向けに研修が紹介されてました * https://twitter.com/suke_masa/status/1057505713805844481

参考リンク