Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
Takuya Iwatsuka
PDF, PPTX
16,044 views
Spring Security 5.0 解剖速報
2017年11月24日のSpring Fest 2017での発表に使用した資料です. WebFlux対応の内容は堅田さんに作成頂いたものですが,許可を得て公開しております.
Engineering
◦
Read more
10
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 72
2
/ 72
3
/ 72
4
/ 72
5
/ 72
6
/ 72
7
/ 72
8
/ 72
9
/ 72
10
/ 72
11
/ 72
12
/ 72
13
/ 72
14
/ 72
15
/ 72
16
/ 72
17
/ 72
18
/ 72
19
/ 72
20
/ 72
21
/ 72
22
/ 72
23
/ 72
24
/ 72
25
/ 72
26
/ 72
27
/ 72
28
/ 72
29
/ 72
30
/ 72
31
/ 72
32
/ 72
33
/ 72
34
/ 72
35
/ 72
36
/ 72
37
/ 72
38
/ 72
39
/ 72
40
/ 72
41
/ 72
42
/ 72
43
/ 72
44
/ 72
45
/ 72
46
/ 72
47
/ 72
48
/ 72
49
/ 72
50
/ 72
51
/ 72
52
/ 72
53
/ 72
54
/ 72
55
/ 72
56
/ 72
57
/ 72
58
/ 72
59
/ 72
60
/ 72
61
/ 72
62
/ 72
63
/ 72
64
/ 72
65
/ 72
66
/ 72
67
/ 72
68
/ 72
69
/ 72
70
/ 72
71
/ 72
72
/ 72
More Related Content
PDF
Keycloak拡張入門
by
Hiroyuki Wada
PPTX
KeycloakでAPI認可に入門する
by
Hitachi, Ltd. OSS Solution Center.
PPTX
BuildKitによる高速でセキュアなイメージビルド
by
Akihiro Suda
PPTX
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
by
NTT DATA Technology & Innovation
PPTX
自宅k8s/vSphere入門
by
富士通クラウドテクノロジーズ株式会社
PDF
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
by
NTT DATA Technology & Innovation
PDF
PostgreSQL 15の新機能を徹底解説
by
Masahiko Sawada
PDF
DockerとPodmanの比較
by
Akihiro Suda
Keycloak拡張入門
by
Hiroyuki Wada
KeycloakでAPI認可に入門する
by
Hitachi, Ltd. OSS Solution Center.
BuildKitによる高速でセキュアなイメージビルド
by
Akihiro Suda
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
by
NTT DATA Technology & Innovation
自宅k8s/vSphere入門
by
富士通クラウドテクノロジーズ株式会社
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
by
NTT DATA Technology & Innovation
PostgreSQL 15の新機能を徹底解説
by
Masahiko Sawada
DockerとPodmanの比較
by
Akihiro Suda
What's hot
PPTX
Keycloakのステップアップ認証について
by
Hitachi, Ltd. OSS Solution Center.
PPTX
Keycloak入門
by
Hiroyuki Wada
PPTX
SPAセキュリティ入門~PHP Conference Japan 2021
by
Hiroshi Tokumaru
PDF
What's new in Spring Boot 2.6 ?
by
土岐 孝平
PDF
Microsoft Graph APIを活用した社内アプリケーション開発
by
Yuki Hattori
PDF
OpenID Connect入門
by
土岐 孝平
PDF
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
by
Toru Makabe
PDF
TLS, HTTP/2演習
by
shigeki_ohtsu
PPTX
「ネットワーク超入門 IPsec VPN編」
by
富士通クラウドテクノロジーズ株式会社
PPTX
ぱぱっと理解するSpring Cloudの基本
by
kazuki kumagai
PDF
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
by
Amazon Web Services Japan
PDF
Vacuum徹底解説
by
Masahiko Sawada
PDF
ソーシャルゲーム案件におけるDB分割のPHP実装
by
infinite_loop
PDF
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
by
ssuser070fa9
PDF
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
by
NTT DATA Technology & Innovation
PDF
分散トレーシング技術について(Open tracingやjaeger)
by
NTT Communications Technology Development
PDF
Jsug spring bootコードリーディング 接触篇 a contact
by
tsukasa tamaru
PDF
マイクロサービス 4つの分割アプローチ
by
増田 亨
PDF
例外設計における大罪
by
Takuto Wada
PDF
超実践 Cloud Spanner 設計講座
by
Samir Hammoudi
Keycloakのステップアップ認証について
by
Hitachi, Ltd. OSS Solution Center.
Keycloak入門
by
Hiroyuki Wada
SPAセキュリティ入門~PHP Conference Japan 2021
by
Hiroshi Tokumaru
What's new in Spring Boot 2.6 ?
by
土岐 孝平
Microsoft Graph APIを活用した社内アプリケーション開発
by
Yuki Hattori
OpenID Connect入門
by
土岐 孝平
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
by
Toru Makabe
TLS, HTTP/2演習
by
shigeki_ohtsu
「ネットワーク超入門 IPsec VPN編」
by
富士通クラウドテクノロジーズ株式会社
ぱぱっと理解するSpring Cloudの基本
by
kazuki kumagai
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
by
Amazon Web Services Japan
Vacuum徹底解説
by
Masahiko Sawada
ソーシャルゲーム案件におけるDB分割のPHP実装
by
infinite_loop
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
by
ssuser070fa9
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
by
NTT DATA Technology & Innovation
分散トレーシング技術について(Open tracingやjaeger)
by
NTT Communications Technology Development
Jsug spring bootコードリーディング 接触篇 a contact
by
tsukasa tamaru
マイクロサービス 4つの分割アプローチ
by
増田 亨
例外設計における大罪
by
Takuto Wada
超実践 Cloud Spanner 設計講座
by
Samir Hammoudi
Similar to Spring Security 5.0 解剖速報
PPTX
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
by
NTT DATA Technology & Innovation
PDF
OAuth 2.0のResource Serverの作り方
by
Hitachi, Ltd. OSS Solution Center.
PPTX
Spring Fest 2017 「エンタープライズで利用するSpring Boot」#jsug #sf_h1
by
Takeshi Hirosue
PPTX
Spring 5に備えるリアクティブプログラミング入門
by
Takuya Iwatsuka
PDF
Spring bootでweb セキュリティ(ログイン認証)編
by
なべ
PPTX
NGINXでの認可について考える
by
Hitachi, Ltd. OSS Solution Center.
PDF
Spring fest2020 spring-security
by
土岐 孝平
PPTX
Spring 12年の歴史
by
movmov
PDF
Spring I/O 2017 報告 ThymeleafのWebFlux対応
by
Takuya Iwatsuka
PPTX
Spring I/O 2019 報告 Spring Frameworkのロードマップと5.2の新機能
by
Takuya Iwatsuka
PPTX
Spring I/O 2015 報告
by
Takuya Iwatsuka
PPTX
Spring Security 4.1 の新機能
by
正和 井岡
PDF
SpringOne Platform 2018 全体報告
by
apkiban
PPTX
SpringOne Platform 2018 全体報告
by
Takuya Iwatsuka
PDF
Microservices /w Spring Security OAuth
by
Makoto Kakuta
PPTX
Webアプリ開発実践tips共有会
by
tomo730
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
by
NTT DATA Technology & Innovation
OAuth 2.0のResource Serverの作り方
by
Hitachi, Ltd. OSS Solution Center.
Spring Fest 2017 「エンタープライズで利用するSpring Boot」#jsug #sf_h1
by
Takeshi Hirosue
Spring 5に備えるリアクティブプログラミング入門
by
Takuya Iwatsuka
Spring bootでweb セキュリティ(ログイン認証)編
by
なべ
NGINXでの認可について考える
by
Hitachi, Ltd. OSS Solution Center.
Spring fest2020 spring-security
by
土岐 孝平
Spring 12年の歴史
by
movmov
Spring I/O 2017 報告 ThymeleafのWebFlux対応
by
Takuya Iwatsuka
Spring I/O 2019 報告 Spring Frameworkのロードマップと5.2の新機能
by
Takuya Iwatsuka
Spring I/O 2015 報告
by
Takuya Iwatsuka
Spring Security 4.1 の新機能
by
正和 井岡
SpringOne Platform 2018 全体報告
by
apkiban
SpringOne Platform 2018 全体報告
by
Takuya Iwatsuka
Microservices /w Spring Security OAuth
by
Makoto Kakuta
Webアプリ開発実践tips共有会
by
tomo730
More from Takuya Iwatsuka
PPTX
Spring tools4
by
Takuya Iwatsuka
PDF
Password validation with Passay
by
Takuya Iwatsuka
PDF
Spring I/O 2016 報告 Test / Cloud / Other Popular Sessions
by
Takuya Iwatsuka
PDF
Spring social の基礎
by
Takuya Iwatsuka
PDF
Spring I/O 2018 報告 RESTDocs RAML, Cloud Contract
by
Takuya Iwatsuka
PDF
SpringOne Platform 2017報告会 メインプロジェクトのアップデート
by
Takuya Iwatsuka
PDF
SpringOne 2016 報告 Reactive APIの設計・実装・使用
by
Takuya Iwatsuka
PDF
SpringとGrarlVM Native Image -2019/12-
by
Takuya Iwatsuka
Spring tools4
by
Takuya Iwatsuka
Password validation with Passay
by
Takuya Iwatsuka
Spring I/O 2016 報告 Test / Cloud / Other Popular Sessions
by
Takuya Iwatsuka
Spring social の基礎
by
Takuya Iwatsuka
Spring I/O 2018 報告 RESTDocs RAML, Cloud Contract
by
Takuya Iwatsuka
SpringOne Platform 2017報告会 メインプロジェクトのアップデート
by
Takuya Iwatsuka
SpringOne 2016 報告 Reactive APIの設計・実装・使用
by
Takuya Iwatsuka
SpringとGrarlVM Native Image -2019/12-
by
Takuya Iwatsuka
Spring Security 5.0 解剖速報
1.
Copyright©2017 NTT corp.
All Rights Reserved. Spring Security 5.0 解剖速報 2017年11⽉24⽇ Spring Fest 2017@KFC Hall & Rooms 岩塚 卓弥,堅⽥ 淳也 NTT ソフトウェアイノベーションセンタ
2.
2Copyright©2017 NTT corp.
All Rights Reserved. • 名前:岩塚 卓弥 • 所属:NTT ソフトウェアイノベーションセンタ • NTTの研究所のうちソフトウェアを専⾨に扱う • ⾃部署ではソフトウェア⼯学を研究 • Springベースのグループ共通フレームワークの整備を担当 • Spring関連: • Spring I/O, SpringOne それぞれ2015年から参加 • 改訂新版 Spring⼊⾨,Spring徹底⼊⾨ レビュアー • JSUG幹事 Introduction
3.
3Copyright©2017 NTT corp.
All Rights Reserved. • 名前:堅⽥ 淳也 • 所属:NTT ソフトウェアイノベーションセンタ • NTTの研究所のうちソフトウェアを専⾨に扱う • ⾃部署ではソフトウェア⼯学を研究 • Springベースのグループ共通フレームワークの整備を担当 • Spring経験 • 元SIerで、プロジェクトへのSpring適⽤⽀援などを担当 Introduction
4.
4Copyright©2017 NTT corp.
All Rights Reserved. Spring Framework 5.0 Released! https://spring.io/blog/2017/09/28/spring-framework-5-0-goes-ga
5.
5Copyright©2017 NTT corp.
All Rights Reserved. Spring Data “Kay” (2017/10/2) Spring Security 5.0 (2017/11/27) Spring Session 2.0 (2017/11/27) Spring Integration 5.0 Spring Batch 4.0 Spring Boot 2.0 Spring Cloud “Finchley” Major version up of the Spring Projects
6.
6Copyright©2017 NTT corp.
All Rights Reserved. • WebFlux対応 Spring Securityが提供する各種Security Filter等を Spring Framework 5.0にて導⼊されたWeb Fluxに 対応させる • OAuth 2.0対応 OAuth 2.0/OpenID Connect による認証機能を追加 • 他 • PasswordEncoder周りの改善 Whatʼs new in the Spring Security 5.0
7.
7Copyright©2017 NTT corp.
All Rights Reserved. WebFlux対応 Spring Security 5.0 解剖速報
8.
8Copyright©2017 NTT corp.
All Rights Reserved. • Spring Framework 5.0 で追加された仕組み • リアクティブプログラミングをサポートする新しい Webフレームワーク • ⾮同期 & ノンブロッキングでリクエストを処理 • 少ないスレッドで多くリクエストを処理可能 • → システムリソースの節約 • クライアントの数が多い / 低速な場合に特に有効 • IoT • Mobile • Microservices What is WebFlux?
9.
9Copyright©2017 NTT corp.
All Rights Reserved. Spring MVC vs Spring WebFlux @Controller, @RequestMapping spring-webmvc Servlet API Servlet Container spring-webflux HTTP / Reactive Streams Tomcat, Jetty, Netty, Undertow Router Functions Spring MVC の横に存在 Netty等のServlet以外の環境にも対応 → spring-webflux は Servlet API に依存しない
10.
10Copyright©2017 NTT corp.
All Rights Reserved. • ControllerのメソッドからReactive Typeを返却 • Mono<T>・・・0個または1個の値を発⾏ • Flux<T>・・・0個以上の値を発⾏ Controller (WebFlux) @RestController public class UserController { @Autowired UserRepository userRepository; @GetMapping("/listAdult") public Flux<User> listAdult() { // 20歳以上のユーザを返す return userRepository.findAll() .filter(u -> u.getAge() >= 20); } } public interface UserRepository { Flux<User> findAll(); } /listAdult の結果
11.
11Copyright©2017 NTT corp.
All Rights Reserved. • 従来のSpring SecurityはServlet APIに依存 • Servlet Filter • HttpSession • HttpServletRequest • HttpServletResponse ・・・ Spring Security WebFlux Support UsernamePassword AuthenticationFilter LogoutFilter ExceptionTranslation Filter SessionManagement Filter Request ・・・ クライアント Webアプリケーション内の リソース Servlet Filter群 Response WebFluxでは 使⽤できない
12.
12Copyright©2017 NTT corp.
All Rights Reserved. Form-based Authentication (without WebFlux) <<interface>> Authentication Manager <<interface>> Authentication Provider Provider Manager <<interface>> Authentication SuccessHandler <<Servlet Filter>> UsernamePassword AuthenticationFilter HTTPリクエストからユーザ名と パスワードを取り出し、認証処理 を開始 認証処理の実装を提供するための インターフェース <<interface>> Authentication FailureHandler DaoAuthenticatin Provider UserDetails Service 認証処理を実⾏するための インターフェース データストアからユーザ 情報を取り出して認証処 理を⾏う実装クラス データストアからユーザ情報を取り 出すサービスインターフェース 認証成功時のハンドリング を⾏うインターフェース 認証失敗時のハンドリング を⾏うインターフェース AuthenticationManagerの 実装クラス
13.
13Copyright©2017 NTT corp.
All Rights Reserved. Form-based Authentication (with WebFlux) ※Spring Security 5 RC1 で確認。正式リリースでは変更されている可能性があります <<interface>> Reactive Authentication Manager <<WebFilter>> Authentication WebFilter <<interface>> Server Authentication SuccessHandler <<interface>> Server Authentication FailureHandler <<Function>> ServerFormLogin Authentication Converter UserDetailsRepository ReactiveAuthentication Manager Reactive UserDetails Service
14.
14Copyright©2017 NTT corp.
All Rights Reserved. Form-based Authentication (with WebFlux) ※Spring Security 5 RC1 で確認。正式リリースでは変更されている可能性があります <<interface>> Reactive Authentication Manager <<WebFilter>> Authentication WebFilter <<interface>> Server Authentication SuccessHandler <<interface>> Server Authentication FailureHandler <<Function>> ServerFormLogin Authentication Converter UserDetailsRepository ReactiveAuthentication Manager Reactive UserDetails Service • AuthenticationWebFilter • 認証を開始するWebFilter • WebFilter? • Spring Framework 5 で提供されるインターフェース • リアクティブ対応したServlet Filterのようなもの • Spring SecurityでServlet Filterとして実現していたクラス は基本的にWebFilterに置き換えられている public interface WebFilter { Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain); }
15.
15Copyright©2017 NTT corp.
All Rights Reserved. Form-based Authentication (with WebFlux) ※Spring Security 5 RC1 で確認。正式リリースでは変更されている可能性があります <<interface>> Reactive Authentication Manager <<WebFilter>> Authentication WebFilter <<interface>> Server Authentication SuccessHandler <<interface>> Server Authentication FailureHandler <<Function>> ServerFormLogin Authentication Converter UserDetailsRepository ReactiveAuthentication Manager Reactive UserDetails Service • ServerFormLoginAuthenticationConverter • リクエストパラメータから認証情報(usernameとpassword)を抽出するFunction • 従来からクラスの役割分担が少し変わっている • 従来はFilterの中で認証情報の取得までやっていた • WebFlux対応では認証情報の取得⽅法に応じたAuthenticationConverterをセット • Basic認証の場合は ServerHttpBasicAuthenticationConverterをフィルタにセットする • フィルタはAuthenticationWebFilterから変えない
16.
16Copyright©2017 NTT corp.
All Rights Reserved. Form-based Authentication (with WebFlux) ※Spring Security 5 RC1 で確認。正式リリースでは変更されている可能性があります <<interface>> Reactive Authentication Manager <<WebFilter>> Authentication WebFilter <<interface>> Server Authentication SuccessHandler <<interface>> Server Authentication FailureHandler <<Function>> ServerFormLogin Authentication Converter UserDetailsRepository ReactiveAuthentication Manager Reactive UserDetails Service • ReactiveAuthenticationManager • リアクティブ対応なAuthenticationManager public interface ReactiveAuthenticationManager { Mono<Authentication> authenticate(Authentication authentication); }
17.
17Copyright©2017 NTT corp.
All Rights Reserved. Form-based Authentication (with WebFlux) ※Spring Security 5 RC1 で確認。正式リリースでは変更されている可能性があります <<interface>> Reactive Authentication Manager <<WebFilter>> Authentication WebFilter <<interface>> Server Authentication SuccessHandler <<interface>> Server Authentication FailureHandler <<Function>> ServerFormLogin Authentication Converter UserDetailsRepository ReactiveAuthentication Manager Reactive UserDetails Service • UserDetailsRepositoryReactiveAuth enticationManager • ユーザ情報を取得し、認証処理を実⾏ • 従来からクラスの役割分担が少し変 わっている • 従来はAuthenticationProviderというイン ターフェースが存在
18.
18Copyright©2017 NTT corp.
All Rights Reserved. Form-based Authentication (with WebFlux) ※Spring Security 5 RC1 で確認。正式リリースでは変更されている可能性があります <<interface>> Reactive Authentication Manager <<WebFilter>> Authentication WebFilter <<interface>> Server Authentication SuccessHandler <<interface>> Server Authentication FailureHandler <<Function>> ServerFormLogin Authentication Converter UserDetailsRepository ReactiveAuthentication Manager Reactive UserDetails Service • ReactiveUserDetailsService • リアクティブ対応なUserDetailsService • メソッド名が微妙に変わっている • 従来はloadUserByUsername public interface ReactiveUserDetailsService { Mono<UserDetails> findByUsername(String username); }
19.
19Copyright©2017 NTT corp.
All Rights Reserved. Form-based Authentication (with WebFlux) ※Spring Security 5 RC1 で確認。正式リリースでは変更されている可能性があります <<interface>> Reactive Authentication Manager <<WebFilter>> Authentication WebFilter <<interface>> Server Authentication SuccessHandler <<interface>> Server Authentication FailureHandler <<Function>> ServerFormLogin Authentication Converter UserDetailsRepository ReactiveAuthentication Manager Reactive UserDetails Service • ServerAuthenticationSuccessHandler • リアクティブ対応なAuthenticationSuccessHandler public interface ServerAuthenticationSuccessHandler { Mono<Void> onAuthenticationSuccess( WebFilterExchange webFilterExchange, Authentication authentication); } • ServerAuthenticationFailurHandler • リアクティブ対応なAuthenticationFailureHandler public interface ServerAuthenticationFailureHandler { Mono<Void> onAuthenticationFailure( WebFilterExchange webFilterExchange, AuthenticationException exception); }
20.
20Copyright©2017 NTT corp.
All Rights Reserved. • 認可のクラス構成はあまり変わらない Authorization (with / without WebFlux) <<interface>> AccessDecision Manager <<Servlet Filter>> FilterSecurity Interceptor <<interface>> Authentication Entrypoint <<interface>> AccessDenied Handler <<Servlet Filter>> Exception TranslationFilter <<interface>> Reactive Authorization Manager <<WebFilter>> Authorization WebFilter <<interface>> Server Authentication Entrypoint <<interface>> Server AccessDenied Handler <<WebFilter>> Exception Translation WebFilter Spring MVC WebFlux FilterSecurityInterceptor ↓ AuthorizationWebFilter AccessDecisionManager ↓ ReactiveAuthorization Manager
21.
21Copyright©2017 NTT corp.
All Rights Reserved. • 従来のアーキテクチャと⼤きくは同じ • WebFlux対応のインターフェースには接頭辞としてReactiveとか Serverが付与されている • AuthenticationManager → ReactiveAuthenticationManager • AuthenticationSuccessHandler → ServerAuthenticationSuccessHandler • ⼀部、クラスの役割分担が変更されているので注意 • ⼀部、インターフェース名が変わっているので対応を⾒つけにくいもの があるので注意 • 従来のServlet API依存のアーキテクチャがなくなるわけではない • Spring MVC と組み合わせるならこれまで通りのやり⽅でOK Note
22.
22Copyright©2017 NTT corp.
All Rights Reserved. Reactive Security Configuration @Configuration @EnableWebFluxSecurity public class SimpleSecurityConfig { @Bean public MapReactiveUserDetailsService userDetailsRepository() { UserDetails user = User.withDefaultPasswordEncoder() .username("user") .password("password") .roles("USER") .build(); UserDetails admin = User.withDefaultPasswordEncoder() .username("admin") .password("admin") .roles("ADMIN", "USER") .build(); return new MapReactiveUserDetailsService(user, admin); } @EnableWebFluxSecurityを付与すること でWebFlux対応のSpring Securityを有効化 インメモリでユーザ情報を保持する ReactiveUserDetailsServiceをBean登録 (従来は InMemoryUserDetailsManager で設定) user, admin の2ユーザの UserDetailsを登録
23.
23Copyright©2017 NTT corp.
All Rights Reserved. Reactive Security Configuration @Bean public SecurityWebFilterChain springSecurityFilterChain( ServerHttpSecurity http) { http .authorizeExchange() .pathMatchers("/resources/**").permitAll() .pathMatchers("/login").permitAll() .pathMatchers("/admin").hasRole("ADMIN") .anyExchange().authenticated() .and() .formLogin() .loginPage("/login"); return http.build(); } } SecurityFilterChainインターフェースのWebFilter版 HttpSecurityクラスのリアクティブ対応版 従来は authorizeRequests() 従来は antMatchers(..) 最後にbuild()メソッドを呼ぶ
24.
24Copyright©2017 NTT corp.
All Rights Reserved. • WebTestClient (Spring Framework 5 より) • Spring Framework 5.0 より追加されたテスト⽤のクラス • WebFluxのエンドポイントをテストできる • サーバを実⾏しても、実⾏しなくてもテスト可能 • Spring MVCのControllerテスト⽤のMockMvcに相当 • ただし、MockMvcは実⾏サーバ上のテストには使えない • @WithMockUser (Spring Security 4 より) • 単体テスト時にアノテーションでユーザ情報を設定可能 • MockMvcと組み合わせて認証区間内のControllerの試験が可能 WebTestClient Support Spring Security 5 では、@WithMockUser が WebTestClient に対応
25.
25Copyright©2017 NTT corp.
All Rights Reserved. WebTestClient Support @RunWith(SpringRunner.class) @ContextConfiguration(classes = SpringSecurityDemo.class) public class WebSecurityTest { @Autowired ApplicationContext context; WebTestClient client; @Before public void setUp() { client = WebTestClient .bindToApplicationContext(context) .apply(springSecurity()) .configureClient() .build(); } テスト⽤のアノテーションを指定 コンテキストをインジェクション (WebApplicationContextではない) WebTestClientのセットアップ Spring Securityのテストサポート機能を適⽤するために、 SecurityMockServerConfigurersのstaticメソッドを呼ぶ (MockMvcで使⽤するSecurityMockMvcConfigurersの staticメソッドはない)
26.
26Copyright©2017 NTT corp.
All Rights Reserved. WebTestClient Support @WithMockUser(roles = "USER") @Test public void testPermission01() throws Exception { client .get() .uri("/") .exchange() .expectStatus().is2xxSuccessful(); } @Test public void testPermission02() throws Exception { client .get() .uri("/") .exchange() .expectStatus().isFound() .expectHeader().valueEquals("Location", "/login"); } USERロールでログインした状態でテストする ログインしないとアクセスできないURLへアクセス ステータスコード200番台で アクセス成功するかチェック 未ログイン状態でテストする (@WithMockUserを付与しない) ログインページ(/login)へリダイレクト されることをチェック
27.
27Copyright©2017 NTT corp.
All Rights Reserved. WebTestClient Support @WithMockUser(roles = "USER") @Test public void testCsrf() throws Exception { client .mutateWith(csrf()) .post() .uri("/") .exchange() .expectStatus().is2xxSuccessful(); CSRF対策を有効化している場合は、 SecurityMockServerConfigurersのstaticメソッド を呼び、mutateWithメソッドに渡す
28.
28Copyright©2017 NTT corp.
All Rights Reserved. Reactive Method Security @Configuration @EnableWebFluxSecurity @EnableReactiveMethodSecurity public class SecurityConfig { JavaConfigクラスに @EnableReactiveMethodSecurityを付与 @Service public class WelcomeServiceImpl implements WelcomeService { @PreAuthorize("hasRole('ADMIN')") public Mono<String> helloAdmin() { return Mono.just("Hello Admin!"); } } リアクティブなメソッドにADMIN ロールをチェックするアノテーション を追加
29.
29Copyright©2017 NTT corp.
All Rights Reserved. Reactive Method Security (Test) @RunWith(SpringRunner.class) @ContextConfiguration(classes = SpringSecurityDemo.class) public class WelcomeServiceImplTest { @Autowired WelcomeService target; @WithMockUser(roles = "ADMIN") @Test public void testHelloAdmin() { Mono<String> message = target.helloAdmin(); StepVerifier .create(message) .expectNext("Hello Admin") .verifyComplete(); } リアクティブなメソッドのテスト にも@WithMockUserを使える
30.
30Copyright©2017 NTT corp.
All Rights Reserved. • 従来提供されていたが、WebFlux対応では実装されていない機能 もたくさんある模様 • 認証イベント通知 • 従来は@EventListenerで通知を受け取れた • AuthenticationSuccessEvent • AuthenticationFailureBadCredentialsEvent • etc… • Remember-Me • セッションタイムアウトを越えて⻑期間ログイン状態を保持する機能 • AuthenticationProviderとして提供されていた各種実装クラス相当 • DaoAuthenticationProvider • PreAuthenticatedAuthenticationProvider • など • LogoutHandlerの実装として提供されていた各種実装クラス相当 • CSRFトークンの削除を⾏うハンドラ • WebSessionのinvalidateを⾏うハンドラ • etc・・・ Note →これらは5.1.0で実装予定
31.
31Copyright©2017 NTT corp.
All Rights Reserved. • 従来は簡易なログインページが⾃動⽣成される Default Login Page
32.
32Copyright©2017 NTT corp.
All Rights Reserved. • WebFlux対応だとデフォルトログインページがちょっ とリッチになる Default Login Page (with WebFlux) Spring Security 5 + Spring MVC Spring Security 5 + Spring WebFlux LoginPageGeneratingWebFilterがHTMLを⽣成 DefaultLoginPageGeneratingFilterがHTMLを⽣成 Bootstrap 4.0.0-beta をインターネット経由で使⽤ <title>Please sign in</title> <link href="https://maxcdn.bootstrapcdn.com /bootst rap /4.0.0-beta /css /bootstrap.min.css"
33.
33Copyright©2017 NTT corp.
All Rights Reserved. • WebFlux対応だとログアウトページも⾃動⽣成される • 従来にはないNew Feature • ⽣成条件 • フォーム認証の設定で、loginPageを指定せずにログインペー ジを⾃動⽣成させるようにする • GETで/logoutへアクセス Default Logout Page (with WebFlux) LogoutPageGeneratingWebFilterがHTMLを⽣成 @Bean public SecurityWebFilterChain springSecurityFilterChain( ServerHttpSecurity http) { http .authorizeExchange() .anyExchange().authenticated() .and() .formLogin(); return http.build(); }
34.
34Copyright©2017 NTT corp.
All Rights Reserved. OAuth 2.0対応 Spring Security 5.0 解剖速報
35.
35Copyright©2017 NTT corp.
All Rights Reserved. Review : OAuth 2.0 Resource Owner (エンドユーザ等) Client (サードパーティ製 アプリ等) Authorization Server Resource Server (Webサービス等) Protected Resource A Client の権限を限定して Protected Resource に アクセスさせるための認可フレームワーク Protected Resource B Protected Resource C AとBの 権限を要求 (認可リクエスト)
36.
36Copyright©2017 NTT corp.
All Rights Reserved. Review : OAuth 2.0 Resource Owner (エンドユーザ等) Client (サードパーティ製 アプリ等) Authorization Server Resource Server (Webサービス等) Protected Resource A Client の権限を限定して Protected Resource に アクセスさせるための認可フレームワーク Protected Resource B Protected Resource C 許可をとる Access Token を渡す*注 *注 Authorization Code Flowにおける Authorization Codeのやり取りの説明は割愛
37.
37Copyright©2017 NTT corp.
All Rights Reserved. Review : OAuth 2.0 Resource Owner (エンドユーザ等) Client (サードパーティ製 アプリ等) Authorization Server Resource Server (Webサービス等) Protected Resource A Client の権限を限定して Protected Resource に アクセスさせるための認可フレームワーク Protected Resource B Protected Resource C Access Token を使う
38.
38Copyright©2017 NTT corp.
All Rights Reserved. • Spring Social • 各種SNSへのアクセスのためにClient機能を独⾃実装 • Spring Security OAuth • Authorization Server, Resource Server, Clientの機能を 実装するためのライブラリ • Spring Boot • Spring Security OAuthを利⽤したSSO機能の提供 • Spring Cloud Security • トークンリレー機能の提供 OAuth 2.0 in Spring Spring Security 5 で OAuth 2.0 をサポートし, 各プロジェクトはそれを使⽤する形に書き換えていく Spring Security OAuth はメンテナンスモードへ(今後の機能追加なし)
39.
39Copyright©2017 NTT corp.
All Rights Reserved. Implementation scope Resource Owner (エンドユーザ等) Client (サードパーティ製 アプリ等) Authorization Server Resource Server (Webサービス等) Protected Resource A Protected Resource B Protected Resource C 5.0では OAuth 2.0 / OpenID Connectによる 「認証機能(Client)」を実装 5.1で 提供予定 提供時期 不明 5.0で 「認証機能」提供
40.
40Copyright©2017 NTT corp.
All Rights Reserved. Review : OpenID Connect End-User Relying Party (Client) OpenID Provider (Authorization Server) UserInfo Endpoint OAuth 2.0 を認証に使⽤するために拡張したプロトコル 認証リクエスト
41.
41Copyright©2017 NTT corp.
All Rights Reserved. Review : OpenID Connect End-User Relying Party (Client) OpenID Provider (Authorization Server) UserInfo Endpoint OAuth 2.0 を認証に使⽤するために拡張したプロトコル 認証する Access Token と ID Token を渡す*注 *注 ここでもAuthorization Codeのやり取りの説明は割愛 ID Tokenを 検証する
42.
42Copyright©2017 NTT corp.
All Rights Reserved. Review : OpenID Connect End-User Relying Party (Client) OpenID Provider (Authorization Server) UserInfo Endpoint OAuth 2.0 を認証に使⽤するために拡張したプロトコル Access Token を使う ユーザプロフィールを渡す
43.
43Copyright©2017 NTT corp.
All Rights Reserved. OAuth 2.0のサービスプロバイダがOpenID Connectに ⾮対応の場合 → Access Tokenで取得したユーザIDで認証する*注 Authentication with OAuth 2.0?? *注 詳細は割愛するが,⼀般にOAuth 2.0は認証⽬的のプロトコルではないため 実装によってはなりすまし攻撃等のセキュリティリスクが有ることに注意すること Spring Security 5.0では両⽅をサポート インタフェースは共通でそれぞれに実装を⽤意
44.
44Copyright©2017 NTT corp.
All Rights Reserved. Overview of OIDC with Spring Security Client情報 Endpoint情報 Spring Security 認証機構 End-User OpenID Provider (Authorization Server) UserInfo Endpoint Security Filter 予めClientの情報と 各種Endpointの情報を 設定しておく
45.
45Copyright©2017 NTT corp.
All Rights Reserved. Overview of OIDC with Spring Security Client情報 Endpoint情報 Spring Security 認証機構 End-User OpenID Provider (Authorization Server) UserInfo Endpoint Security Filter Authorization Endpointへ リダイレクト ログイン試⾏
46.
46Copyright©2017 NTT corp.
All Rights Reserved. Overview of OIDC with Spring Security Client情報 Endpoint情報 Spring Security 認証機構 End-User OpenID Provider (Authorization Server) UserInfo Endpoint Security Filter 認証
47.
47Copyright©2017 NTT corp.
All Rights Reserved. Overview of OIDC with Spring Security Client情報 Endpoint情報 Spring Security 認証機構 End-User OpenID Provider (Authorization Server) UserInfo Endpoint Security Filter 指定されたRedirect URIへ リダイレクト 認証処理を 委譲
48.
48Copyright©2017 NTT corp.
All Rights Reserved. Overview of OIDC with Spring Security Client情報 Endpoint情報 Spring Security 認証機構 End-User OpenID Provider (Authorization Server) UserInfo Endpoint Security Filter Token Endpointに リクエスト送信 Access Tokenと ID Tokenを取得
49.
49Copyright©2017 NTT corp.
All Rights Reserved. Overview of OIDC with Spring Security Client情報 Endpoint情報 Spring Security 認証機構 End-User OpenID Provider (Authorization Server) UserInfo Endpoint Security Filter 検証⽤公開鍵(JWK Set)を リクエスト JWK Setを取得 ID Tokenを検証
50.
50Copyright©2017 NTT corp.
All Rights Reserved. Overview of OIDC with Spring Security Client情報 Endpoint情報 Spring Security 認証機構 End-User OpenID Provider (Authorization Server) UserInfo Endpoint Security Filter リクエスト ユーザプロフィールを取得
51.
51Copyright©2017 NTT corp.
All Rights Reserved. Overview of OIDC with Spring Security Client情報 Endpoint情報 Spring Security 認証機構 End-User OpenID Provider (Authorization Server) UserInfo Endpoint Security Filter ユーザ情報作成 認証済みユーザとして セッションに格納
52.
52Copyright©2017 NTT corp.
All Rights Reserved. Overview of OIDC with Spring Security Client情報 Endpoint情報 Spring Security 認証機構 End-User OpenID Provider (Authorization Server) UserInfo Endpoint Security Filter 予めClientの情報と 各種Endpointの情報を 設定しておく
53.
53Copyright©2017 NTT corp.
All Rights Reserved. Client / Provider Management <<interface>> ClientRegistrationRepository ClientRegistration ClientRegistration. ProviderDetails ClientRegistration ClientRegistration. ProviderDetails ClientRegistration ClientRegistration. ProviderDetails Client情報 各種Endpoint情報 Load
54.
54Copyright©2017 NTT corp.
All Rights Reserved. • ClientRegistrationのID (registerID) • Client名 • Client ID • Client Secret • Clientの認証⽅法 (Basic or Post) • Grant Type (Authorization Code or Implicit) • End-User認証後のRedirect URI • 要求するScope ClientRegistration
55.
55Copyright©2017 NTT corp.
All Rights Reserved. • Authorization Endpoint • Token Endpoint • UserInfo Endpoint • End-UserのIDを取得するための属性名 • 公開鍵(JWK Set)取得⽤のEndpoint ProviderDetails
56.
56Copyright©2017 NTT corp.
All Rights Reserved. Overview of OIDC with Spring Security Client情報 Endpoint情報 Spring Security 認証機構 End-User OpenID Provider (Authorization Server) UserInfo Endpoint Security Filter Authorization Endpointへ リダイレクト ログイン試⾏
57.
57Copyright©2017 NTT corp.
All Rights Reserved. Authorization Request (Authentication Request) OAuth2Authorization RequestRedirectFilter Request <<interface>> ClientRegistrationRepository /oauth2/authorization/{registerID} への リクエストをハンドリング(URLは変更可) Rediret Client / Endpoint情報を提供 Authorization Requestを作成
58.
58Copyright©2017 NTT corp.
All Rights Reserved. Overview of OIDC with Spring Security Client情報 Endpoint情報 Spring Security 認証機構 End-User OpenID Provider (Authorization Server) UserInfo Endpoint Security Filter 指定されたRedirect URIへ リダイレクト 認証処理を 委譲
59.
59Copyright©2017 NTT corp.
All Rights Reserved. Review : Authentication with Spring Security <<interface>> AuthenticationManager ProviderManager <<interface>> AuthenticationProvider AuthenticationProviderの 実装クラス AuthenticationProviderの 実装クラス AuthenticationProviderの 実装クラス AuthenticationFilter Request リクエストを ハンドリング 認証処理を実施 認証処理を委譲
60.
60Copyright©2017 NTT corp.
All Rights Reserved. Authentication with OIDC / OAuth 2.0 <<interface>> AuthenticationManager ProviderManager <<interface>> AuthenticationProvider OAuth2Login AuthenticationFilter Request /login/oauth2/code/* への リクエストをハンドリング (URLは変更可) OidcAuthorizationCode AuthenticationProvider OAuth2Login AuthenticationProvider OpenID Connect⽤ OAuth 2.0⽤
61.
61Copyright©2017 NTT corp.
All Rights Reserved. Overview of OIDC with Spring Security Client情報 Endpoint情報 Spring Security 認証機構 End-User OpenID Provider (Authorization Server) UserInfo Endpoint Security Filter ユーザ情報作成 認証済みユーザとして セッションに格納
62.
62Copyright©2017 NTT corp.
All Rights Reserved. OAuth2User <<interface>> AuthenticatedPrincipal <<interface>> OAuth2User DefaultOAuth2User <<interface>> OidcUser DefaultOidcUser OAuth 2.0⽤ OpenID Connect⽤ UserInfo, ID Token等を持つ
63.
63Copyright©2017 NTT corp.
All Rights Reserved. Save authenticated user information OAuth2Login AuthenticationFilter <<interface>> OAuth2AuthorizedClientService OAuth2AuthenticationTokenOAuth2AuthorizedClient OAuth2AccessToken Save Save SecurityContextから 取得できるようになる OAuth2AuthorizedClientService経由で 取得できるようになる <<interface>> OAuth2User
64.
64Copyright©2017 NTT corp.
All Rights Reserved. 1. 以下の依存ライブラリを追加 (pom.xml等) • spring-boot-starter-web • pring-security-config • pring-security-oauth2-client • pring-security-oauth2-jose 2. Client情報,Endpoint情報の設定 (application.yml 等) • spring.security.oauth2.client.registration.{registrationId}の 下にClient情報を設定 • spring.security.oauth2.client.provider.{providerId}の下に Endpoint情報を設定 • Facebook, Google, GitHub, Oktaの場合は設定不要 Use OIDC with Spring Boot AutoConfigurationでデフォルトのBeanが作成される
65.
65Copyright©2017 NTT corp.
All Rights Reserved. • ログインページのカスタマイズ • InMemory実装の置換 • GrantedAuthorityのカスタマイズ Customize points
66.
66Copyright©2017 NTT corp.
All Rights Reserved. Customize login page 1. WebSecurityConfigurerAdapter を拡張して設定 2. Controllerの実装 3. ログインページの実装
67.
67Copyright©2017 NTT corp.
All Rights Reserved. • ClientRegistrationRepository • デフォルト実装は InMemoryClientRegistrationRepository • Client情報が固定ならばInMemory実装のままでもあ まり困らないかもしれない • OAuth2AuthorizedClientService • デフォルト実装は InMemoryOAuth2AuthorizedClientService • 認証済みユーザのAccess Tokenの管理を外部化する ためには独⾃で実装が必要となる Replace InMemory implementation
68.
68Copyright©2017 NTT corp.
All Rights Reserved. デフォルトでは認証済みユーザの権限 (Role) は⼀律で “USER” に設定される Customize GrantedAuthority (1/2) <<interface>> GrantedAuthority OidcUserAuthority OAuth2UserAuthority OAuth 2.0⽤ OpenID Connect⽤ UserInfo Endpoint から取得したプロフィール情報や ID Token の情報が格納されている
69.
69Copyright©2017 NTT corp.
All Rights Reserved. 1. GrantedAuthoritiesMapper の実装を作成 2. WebSecurityConfigurerAdapter を拡張して設定 Customize GrantedAuthority (2/2)
70.
70Copyright©2017 NTT corp.
All Rights Reserved. その他の改善 Spring Security 5.0 解剖速報
71.
71Copyright©2017 NTT corp.
All Rights Reserved. • CoreモジュールのPasswordEncoderの削除 • 従来からDeprecatedだった • CryptoモジュールのPasswordEncoderを使えば良い • DelegatingPasswordEncoderの追加 • パスワードのハッシュ化のアルゴリズムごとに適切な PasswordEncoderに処理を委譲する • ハッシュの先頭にアルゴリズムを指定するキーワードの付与が必要 • DaoAuthenticationProviderではデフォルトで使⽤される Improvement of PasswordEncoder
72.
72Copyright©2017 NTT corp.
All Rights Reserved. DelegatingPasswordEncoder {algorithm}xxxxxxxxxxxxxxxxxx ハッシュ値アルゴリズムのID デフォルトで設定されているアルゴリズムの例 デフォルトではBCryptPasswordEncoderを使⽤して ハッシュ化する アルゴリズムのID PasswordEncoder bcrypt BCryptPasswordEncoder sha256 StandardPasswordEncoder MD5 MessageDigestPasswordEncoder(“MD5”) ldap LdapShaPasswordEncoder
Download