SlideShare a Scribd company logo
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
Pivotal認定講師が解説!
基礎からのOAuth 2.0と
Spring Security 5.1による実装
(株)カサレアル 多⽥真敏
2018年10⽉31⽇
JSUG Spring Fest
1
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
このセッションについて
▸ OAuth 2.0の概要およびSpring Security 5.1の
関連機能について、基礎から分かりやすく解説
します
▸ 【中級者向け】Spring Securityの基礎知識はあ
ることが前提です
▸ でもSpring Security成分は最後の30%くらい…💦
2
ハッシュタグ
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
⾃⼰紹介
▸ 多⽥真敏(@suke_masa)
▸ 研修トレーナー@カサレアル
▸ Spring / Java EE / Microservices

/ Cloud Foundry
▸ Pivotal認定講師
▸ ⽇本Springユーザ会スタッフ
▸ ⽇本GlassFishユーザー会運営メンバー
3
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
株式会社カサレアル
▸ 他社には無い⾊々なプログラミング⾔語の研修
を提供しています!
4
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
世界⼀ハイレベルなSpring研修
▸ Pivotal認定 Core Spring (4⽇間)
▸ DI、AOP、Test、JDBC、Tx、Data、Boot、Web、
REST、Security、OAuth 2.0、Actuator
▸ ロジカルな講義+演習で徹底理解
▸ アーキテクトやリーダー向け
5
https://www.casareal.co.jp/ls/service/openseminar/pivotal/p016
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
オリジナルSpring研修
▸ はじめてのSpring MVCによる

Webアプリケーション開発 (2⽇間)
▸ エントリー向けSpringの基礎
▸Spring Security⼊⾨ (1⽇間)
▸ 認証/認可、アーキテクチャー、OAuth 2.0
▸Spring Batch⼊⾨ (1⽇間)
▸ バッチ処理
6
https://www.casareal.co.jp/ls/service/openseminar/java
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
コンテナはじめました
▸ Docker⼊⾨ (1⽇間)
▸ Kubernetes⼊⾨ (1⽇間)
7
https://www.casareal.co.jp/ls/service/openseminar/cloudnative
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
11/29 SpringOneハイライト!
▸ 9⽉に⽶国で⾏われたPivotalのカンファレンス

SpringOne Platformの内容をハイライトで

ご紹介!
▸ 詳細はこちら
8
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
⽬次
① OAuth 2.0の基本⽤語
② アクセストークンの取得
③ アクセストークンを利⽤した

リソースアクセス
④ 認可サーバーの実装
⑤ クライアントの実装
⑥ リソースサーバーの実装
9
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
⽬次
① OAuth 2.0の基本⽤語
② アクセストークンの取得
③ アクセストークンを利⽤した

リソースアクセス
④ 認可サーバーの実装
⑤ クライアントの実装
⑥ リソースサーバーの実装
10
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
OAuth 2.0とは
▸ 認可の流れを規定したプロトコル
▸ RFC 6749 (⽇本語版もある)
▸ OAuth 1.0とは別物
▸ Struts 1とStruts 2くらい違う
▸ 認証プロトコルOpenID Connect

のベースになっている
11
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
アクセストークンとは
▸ サーバーのデータにアクセスするための許可証
12
アクセス
トークン
こんにちは!

楽しみだなー
①リクエスト
②レスポンス
クライアント サーバー
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
スコープとは
13
スコープ=
そのアクセストークンが
やれることの範囲
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
ID+パスワードじゃダメなの?🤔
▸ パスワードを持っている⼈は全権限を持つ
▸ 盗んだ⼈は何でもやりたい放題😇
▸ アクセストークンなら
▸ 盗まれても、そのトークンを無効化すればいいだけ
▸ スコープにより、できることが制限されている
14
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
OAuth 2.0の登場⼈物
① リソースオーナー (Resource Owner)
▸ 情報の持ち主。ほぼ⼈間。
② リソースサーバー (Resource Server)
▸ 情報を保持するサーバー。
③ クライアント (Client)
▸ リソースサーバーからもらった情報を扱うアプリケーション。
④ 認可サーバー (Authorization Server)
▸ ユーザー情報を保持するサーバー。
15
クラス名などで頻出!
正確に理解しましょう
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
Twitterの例で登場⼈物まとめ
16
twitter.com
こんにちは!

楽しみだなー
リソース

オーナー
クライアント
リソースサーバー
認可サーバー
認可
アクセス

トークン

付与
アクセス

トークン
つぶやき
※本当はTwitterはOAuth 1.0を使っています
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
今回のサンプルアプリ
17
▸ TODO管理アプリ
▸ 認可サーバー
▸ リソースサーバー
▸ クライアント
請求書作成

資料郵送
JSON
HTML
アクセス

トークン
検証
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
18
DEMO
ソースコード -> https://github.com/MasatoshiTada/oauth2-with-spring-security-51
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
⽬次
① OAuth 2.0の基本⽤語
② アクセストークンの取得
③ アクセストークンを利⽤した

リソースアクセス
④ 認可サーバーの実装
⑤ クライアントの実装
⑥ リソースサーバーの実装
19
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
グラントタイプ(アクセストークンの取得⽅法)
① 認可コード
▸ 主にサーバーサイドWebアプリケーション
② インプリシット
▸ 主にクライアントサイドWebアプリケーション
③ リソースオーナーパスワードクレデンシャル
▸ 主に公式のスマホアプリなど
④ クライアントクレデンシャル
▸ クライアント⾃⾝の情報取得
20
今⽇はコレ
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
認可コードとは
▸ アクセストークンの引換券
21
認可サーバークライアント
1. 認可コード発⾏
2. 認可コード
3. アクセストークン
※このページの図はイメージです。正確な図は後ほど。
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
なぜ認可コードが必要?
▸ アクセストークンがWebブラウザに渡らないよ
うにするため!
▸ 認可コードとリダイレクトを組み合わせて実現
22
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
アクセストークン取得の流れ
23
認可サーバー
クライアント
リソース

オーナー
Web

ブラウザ※
※Webブラウザは、仕様書では「ユーザーエージェント」と記載されています
①初回アクセス
⑤認可コード発⾏+リダイレクト
⑥認可コード
⑦アクセストークン
②認可エンドポイントにリダイレクト
認可
エンドポイント
③認可画⾯
④認可
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
なぜ認可コードが必要?
24
認可サーバー
クライアント
リソース

オーナー
Web

ブラウザ
①初回アクセス
⑤認可コード発⾏+リダイレクト
⑥認可コード
⑦アクセストークン
②認可エンドポイントにリダイレクト
③認可画⾯
④認可
アクセストークンが
Webブラウザに
渡らない!
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
認可コード発⾏+リダイレクト
25
認可サーバー
クライアント
⑤認可コード発⾏+リダイレクト
リダイレクト
エンドポイント
302 Found
Location: https://クライアント/リダ
イレクトエンドポイント?code=認可コード
GET https://クライアント/リダイレクト
エンドポイント?code=認可コード
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
認可コードでアクセストークンをリクエスト
26
認可サーバー
クライアント
⑥認可コード トークン
エンドポイント
POST https://認可サーバー/トークンエ
ンドポイント
grant_type=authorization_code&cod
e=認可コード&redirect_uri=リダイレク
トエンドポイント
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
アクセストークンをレスポンス
27
認可サーバー
クライアント
⑦アクセストークン トークン
エンドポイント
200 OK
{
"access_token":"アクセストークン",
"expires_in":3600,
"refresh_token":"リフレッシュトークン"
}
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
OAuth 2.0仕様で未定義の部分
28
認可サーバー
クライアント
リソース

オーナー
Web

ブラウザ
①初回アクセス
⑤認可コード発⾏+リダイレクト
⑥認可コード
⑦アクセストークン
②認可エンドポイントにリダイレクト
③認可画⾯
④認可
どう認可するかは決まっていない
→開発者が作り込む
or ライブラリ依存
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
認証が必要な箇所①
29
認可サーバー
クライアント
リソース

オーナー
Web

ブラウザ
①初回アクセス
⑤認可コード発⾏+リダイレクト
⑥認可コード
⑦アクセストークン
②認可エンドポイントにリダイレクト
③認可画⾯
④認可
認可したのは本当にリソースオーナー?
→リソースオーナーのID・パスワードで認証
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
認証が必要な箇所②
30
認可サーバー
クライアント
リソース

オーナー
Web

ブラウザ
①初回アクセス
⑤認可コード発⾏+リダイレクト
⑥認可コード
⑦アクセストークン
②認可エンドポイントにリダイレクト
③認可画⾯
④認可
認可コードを送ってきたのは本当にクライアント?
→client_id・client_secretでBASIC認証
※client_idとclient_secretは、認可サーバーに事前に発⾏してもらう
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
⽬次
① OAuth 2.0の基本⽤語
② アクセストークンの取得
③ アクセストークンを利⽤した

リソースアクセス
④ 認可サーバーの実装
⑤ クライアントの実装
⑥ リソースサーバーの実装
31
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
アクセストークンを利⽤したリソースアクセス
32
認可サーバー
クライアント
リソース

オーナー
Web

ブラウザ
請求書作成

資料郵送
リソース

サーバー
①リクエスト
③アクセス

 トークン

 検証
④ユーザー情報やスコープ
⑥レスポンス⑦レスポンス
⑤スコープを

 チェック
②リソースにアクセス

with アクセストークン
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
アクセストークンを利⽤したリソースアクセス
33
認可サーバー
クライアント
リソース

オーナー
Web

ブラウザ
請求書作成

資料郵送
リソース

サーバー
①リクエスト
③アクセス

 トークン

 検証
④ユーザー情報やスコープ
⑥レスポンス⑦レスポンス
⑤スコープを

 チェック
②リソースにアクセス

with アクセストークン
GET https://リソースサーバー/foo/bar
Authorization: Bearer アクセストークン
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
OAuth 2.0で未定義の部分
34
認可サーバー
クライアント
リソース

オーナー
Web

ブラウザ
請求書作成

資料郵送
リソース

サーバー
①リクエスト
③アクセス

 トークン

 検証
④ユーザー情報やスコープ
⑥レスポンス⑦レスポンス
⑤スコープを

 チェック
②リソースにアクセス

with アクセストークン
アクセストークンを

送る部分以外は

ほとんど未定義
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
アクセストークンやスコープの検証⽅法
A) 認可サーバーに問い合わせる(Basic認証など
が必要)
B) 共有データベースなどを利⽤する
C) アクセストークン⾃⾝に情報を含めておく
35
↑今回はコレ
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
JWT (JSON Web Token : ジョット)
▸ 平たく⾔うとアクセストークンの形式の⼀種
▸ アクセストークン⾃⾝にユーザー情報やスコー
プなどの情報を含めることができる
▸ 「.(ピリオド)」で3つの部分に分けられる
▸ それぞれの部分は、JSONをBase64URLでエンコード
したもの
36
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
JWTの構造
37
eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJzbGcyMG9uOVg2c
zZFOExmNDZfQmRuaExHQy1xZnIyMVlvWE9nQVFKRlIwIn0.eyJqdGkiOiI4YzUyN
mMzZC03OTA0LTQ2MWItOGU5ZS1jNDE5YTQ1NmFlNDMiLCJleHAiOjE1Mzg4MTM0Mj
YsIm5iZiI6MCwiaWF0IjoxNTM4ODEzMTI2LCJpc3MiOiJodHRwOi8vbG9jYWxob3N
0OjkwMDAvYXV0aC9yZWFsbXMvaGVsbG8tYXBpIiwiYXVkIjoidHJhaW5pbmc2LWZy
b250LXNlcnZpY2UiLCJzdWIiOiIxYWI5Yjg4Ny0yNDRhLTRjZTktYTBjMy1iZTc2Z
GE4NzZiMTQiLCJ0eXAiOiJCZWFyZXIiLCJhenAiOiJ0cmFpbmluZzYtZnJvbnQtc2
VydmljZSIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6IjA4MjU3OTFlLTE
3ODQtNGQxMC1hMjYyLTAzM2U4YmE3OWViMCIsImFjciI6IjEiLCJhbGxvd2VkLW9y
aWdpbnMiOlsiaHR0cDovL2xvY2FsaG9zdDo4MDgwIl0sInJlYWxtX2FjY2VzcyI6e
yJyb2xlcyI6WyJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIl19LC
JyZXNvdXJjZV9hY2Nlc3MiOnsiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWN
jb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwidmlldy1wcm9maWxlIl19fSwi
c2NvcGUiOiJoZWxsbzpyZWFkIHByb2ZpbGUiLCJwcmVmZXJyZWRfdXNlcm5hbWUiO
iJ1c2VyIn0.fH8s3HaOFjC1CiZeWUP2O1AB2ruDPh9VRnFqSkRoM2zCTpqWgrkiQ
BKW3r9RQAD_gsZCi3G7s0tQSCmuAMoht7gLgH9rFKzdKhuKiISeDUF7v2baPva8fH
VN8zP1YF84XnVxq-zVThXLBdDgTRXWWI0_RG6x-
vJVDRv00gvDwPPvA3WxxIGcekuEjl3ChQhFHozDiEglAlN-
vlkDV2IvxVtON4GJ1UAwIj9uTpyAoIVY8oOy_0mMuevzxBSXk2HUxWr2Vrvhj3c2a
RrchCOHPsDELtX0CmEBj_bU38d1XbHL30Ar7PWGvpPeSkM3mIykR-
osPDSXJwq8gUSAda0JeQ
ヘッダー
ペイロード
電⼦署名
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
ペイロードをデコードすると
38※Powered by jwt.io
スコープと
ユーザー名
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
署名を利⽤したJWTの検証
▸ リソースサーバーは、

JWTの署名で検証する
▸ 署名は、認可サーバーの秘
密鍵で暗号化されている

→認可サーバーの公開鍵で
復号化する
39
※Powered by jwt.io
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
JWK (JSON Web Key)
▸ 認可サーバーの公開鍵
の素となる情報が含ま
れたJSON
▸ 認可サーバーからJWK
Set形式(JWKの配列を含んだ
JSON)で取得する
40
JWK Set
JWK
※具体的な検証⽅法は下記ブログが参考になります

 OpenID Connect の署名検証
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
JWTの弱点と対策
▸ 弱点:アクセストークンの剥奪が不可能👎
▸ リソースサーバーが認可サーバーに問い合わせしない
ため、認可サーバー側での制御が不可能
▸ 対策:アクセストークンの有効期限を短くする👌
▸ だいたい数分間くらい
▸ 期限が切れたらリフレッシュトークンで再取得する
41
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
リフレッシュトークン
▸ アクセストークンを再取得するためのトークン
▸ アクセストークン取得時に⼀緒に受け取る
42
200 OK
{
"access_token":"アクセストークン",
"expires_in":300,
"refresh_token":"リフレッシュトークン"
}
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
アクセストークンのリフレッシュ⽅法
43
POST https://認可サーバー/トークンエンドポイント
Authorization: Basic <client_id : client_secret>
grant_type=refresh_token&refresh_token=リフレッシュ
トークン
200 OK
{
"access_token":"新しいアクセストークン",
"expires_in":300,
"refresh_token":"リフレッシュトークン"
}
※リフレッシュトークンも新しくするかはOAuth 2.0仕様には定められていない

 (Keycloakではリフレッシュトークンも新しくなる)
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
⽬次
① OAuth 2.0の基本⽤語
② アクセストークンの取得
③ アクセストークンを利⽤した

リソースアクセス
④ 認可サーバーの実装
⑤ クライアントの実装
⑥ リソースサーバーの実装
44
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
Spring SecurityのOAuth 2.0対応の歴史
▸ 4.x以前
▸ 姉妹ライブラリに

機能が分散していた
▸ Spring Security
OAuth2
▸ Spring Cloud
▸ Spring Social...
45
▸ 5.0以降
▸ OAuth 2.0の機能を

Spring Security

本体に新規開発
▸ Spring Security
OAuth2はメンテナンス
モードへ

(バグフィックスは継続)
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
個⼈的な所⾒
▸ Spring Security OAuth2は難しすぎる😇
▸ ドキュメントが少ない
▸ Javadocがほとんど書いてない
▸ 似たような名前のプロパティが多い
▸ OAuth 2.0仕様で未定義な部分の独⾃実装が多い
▸ 作るべきConfigが多い
46
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
Spring Security 5のOAuth 2.0対応状況
47
機能 説明
クライアント 5.0で対応済み
リソースサーバー 5.1で対応済み
認可サーバー 未対応(5.2以降?)
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
認可サーバーを作るには?
A) Spring Security OAuth2を利⽤する
B) 認可サーバー機能を持ったサービスを利⽤する
C) Keycloakなど既成の認可サーバーを利⽤する
48
↑今回はコレ
※Spring Security OAuth2の例は下記を参照

https://github.com/Pivotal-Japan/spring-security-oauth-workshop
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
Keycloakとは
▸ OAuth2やOpenID Connectに
対応したシングルサインオン基
盤
▸ Red Hat社がオープンソースで
開発
▸ https://www.keycloak.org
49
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
Keycloakのインストールや設定など
▸ クライアント・ユーザー・スコープ等を設定
▸ 詳細はブログに書きました
▸ OAuth 2.0 with Spring Security 5.1の認可サーバーとして
Keycloakを使う
50
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
重要エンドポイント
▸ 認可エンドポイント
▸ http://サーバー名/auth/realms/レルム名/protocol/openid-connect/auth
▸ トークンエンドポイント
▸ http://サーバー名/auth/realms/レルム名/protocol/openid-connect/token
▸ ユーザー情報
▸ http://サーバー名/auth/realms/レルム名/protocol/openid-connect/userinfo
▸ JWK Set
▸ http://サーバー名/auth/realms/レルム名/protocol/openid-connect/cert
51
クライアントや
リソースサーバーから
アクセスする
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
トークンのレスポンス
52
200 OK
{
"access_token" : "JWT形式のアクセストークン",
"expires_in" : 有効時間(秒単位),
"refresh_expires_in" : 有効時間(秒単位),
"refresh_token" : "JWT形式のリフレッシュトークン",
"scope" : "scope1 scope2 scope3 ...",
...
}
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
⽬次
① OAuth 2.0の基本⽤語
② アクセストークンの取得
③ アクセストークンを利⽤した

リソースアクセス
④ 認可サーバーの実装
⑤ クライアントの実装
⑥ リソースサーバーの実装
53
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
依存性
54
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<!-- OAuth2クライアント機能 -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-oauth2-client</artifactId>
</dependency>
<!-- JWT関連機能 -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-oauth2-jose</artifactId>
</dependency>
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
application.yml
55
spring.security.oauth2.client.registration.todo:
provider: 任意の名前(.registrationの後にも指定する)
client-id: クライアントID
client-secret: クライアントシークレット
client-name: 任意の名前(画⾯表⽰で使われる)
client-authentication-method: クライアント認証⽅法
authorization-grant-type: グラントタイプ
redirect-uri: リダイレクトエンドポイントのURL
scope: このアプリのスコープをカンマ区切りで指定
※スペースの都合上でYAML形式で書いていますが、個⼈的にはproperties派です
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
application.yml(続き)
56
spring.security.oauth2.client.provider.todo:
authorization-uri: 認可エンドポイントのURL
token-uri: トークンエンドポイントのURL
user-info-uri: ユーザー情報のJSONが返ってくるURL
user-name-attribute: JSONの中のユーザー名を表す属性名
user-info-authentication-method: ユーザー情報取得時の認証⽅式
jwk-set-uri: JWK Setが返ってくるURL
issuer-uri: 認可サーバーのIssuer Identifier
※Keycloakの場合、issuer-uriを指定すれば他のプロパティは指定不要(user-name-attributeは任意)
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
Java Config
57
@EnableWebSecurity
public class SecurityConfig
extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http)
throws Exception {
...
http.oauth2Login()
.loginPage("/login")
.permitAll();
...
}
}
OAuth2Loginを有効化
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
ログイン画⾯
58
<html ...>
<head>...</head>
<body>
<h1>OAuth2ログインページ</h1>
<a th:href="@{/oauth2/authorization/todo}">
Keycloakでログイン
</a>
</body>
</html>
/oauth2/authorization/provider名
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
アーキテクチャー概要
59
メモリ
OAuth2AuthorizedClient
OAuth2

Access

Token
OAuth2

Refresh

Token
OAuth2AuthorizedClient
OAuth2

Access

Token
OAuth2

Refresh

Token
・・・
OAuth2

Authorized

Client

Service
※Spring Bootを利⽤している場合、

 OAuth2AuthorizedClientServiceは

 Bean定義済になっています
取得・削除・追加
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
アクセストークンの取得
60
@Autowired
private OAuth2AuthorizedClientService clientService;
// OAuth2AuthenticationTokenはAuthentication実装クラス
OAuth2AuthenticationToken auth =
(OAuth2AuthenticationToken) SecurityContextHolder
.getContext().getAuthentication();
// OAuth2AuthorizedClientを取得
OAuth2AuthorizedClient client =
clientService.loadAuthorizedClient(
auth.getAuthorizedClientRegistrationId(),
auth.getName());
// アクセストークンを取得
String token = client.getAccessToken().getTokenValue();
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
リソースサーバーにアクセス
61
RestTemplate restTemplate = ...;
String token = ...;
// "Authorization: Bearer アクセストークン"というヘッダーを追加
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.AUTHORIZATION, "Bearer " + token);
HttpEntity<Object> httpEntity = new HttpEntity<>(headers);
// リソースサーバーにリクエストし、レスポンスを受け取る
ResponseEntity<String> responseEntity =
restTemplate.exchange("http://リソースサーバーのURL",
HttpMethod.GET, httpEntity, String.class);
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
Spring WebFluxでは…
▸ WebClientだと、アクセストークンのヘッダー
への追加やリフレッシュを⾃動的にやってくれ
るらしい(未検証)
▸ https://docs.spring.io/spring-security/site/docs/
current/reference/htmlsingle/#servlet-webclient
62
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
ログアウト
▸ 必要に応じて認可サーバー
からもログアウトする
▸ 認可サーバーのログアウト
処理はLogoutHandlerで実
装する
63
請求書作成

資料郵送
クライアント
リソースサーバー
認可サーバー
ログアウト
ログアウト
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
Keycloakからのログアウト
▸ ログアウトエンドポイントにPOSTでアクセス
▸ 必要なリクエストパラメーターは下記3つ
① クライアントID
② クライアントシークレット
③ リフレッシュトークン
64
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
LogoutHandlerの実装
65
private LogoutHandler logoutHandler() {
return (request, response, authentication) -> {
MultiValueMap<String, String> params = ...;
params.add("client_id", クライアントID);
params.add("client_secret", クライアントシークレット);
params.add("refresh_token", リフレッシュトークン);
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_TYPE,
MediaType.APPLICATION_FORM_URLENCODED_VALUE);
RequestEntity<MultiValueMap<String, String>> requestEntity =
new RequestEntity<>(params, headers, HttpMethod.POST,
URI.create(Keycloakのログアウトエンドポイント);
ResponseEntity<String> responseEntity =
restTemplate.exchange(requestEntity, String.class);
};
}
※リフレッシュトークンなどの取得方法はソースコード参照
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
LogoutHandlerの実装
66
@EnableWebSecurity
public class SecurityConfig
extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http)
throws Exception {
...
http.logout()
.addLogoutHandler(logoutHandler())
.invalidateHttpSession(true)
.permitAll();
...
}
}
作成したLogoutHandlerを追加
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
⽬次
① OAuth 2.0の基本⽤語
② アクセストークンの取得
③ アクセストークンを利⽤した

リソースアクセス
④ 認可サーバーの実装
⑤ クライアントの実装
⑥ リソースサーバーの実装
67
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
依存性
68
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<!-- OAuth2リソースサーバー機能 -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-oauth2-resource-server</
artifactId>
</dependency>
<!-- JWT関連機能 -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-oauth2-jose</artifactId>
</dependency>
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
application.yml
69
spring.security.oauth2.resourceserver.jwt:
jwk-set-uri: JWK Setが返ってくるURL
issuer-uri: 認可サーバーのIssuer Identifier
※Keycloakの場合、issuer-uriを指定すればjwk-set-uriは指定不要
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
JWK Setの取得フロー
① 起動時にissuer_uriで指定されたURLにリク
エストを送信する
② レスポンスJSONのjwks_uri属性をJWK Set
を取得するURLとする
③ クライアントからの初回アクセス時にJWK Set
をリクエストする
70
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
Java Config
71
@EnableWebSecurity
public class SecurityConfig
extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http)
throws Exception {
...
http.authorizeRequests()
.mvcMatchers("保護対象のURL")
.hasAuthority("SCOPE_スコープ名")
...;
http.oauth2ResourceServer()
.jwt();
...
}
}
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
最後に
72
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
OAuth 2.0のセキュリティ考慮事項
▸ 秘匿情報が⾶び交うためHTTPS必須
▸ その他、必ずOAuth 2.0仕様書をチェックしましょ
う!
▸ 10.6 認可コードリダイレクトURIの操作
▸ 10.11 フィッシングアタック
▸ 10.12 クロスサイトリクエストフォージェリ

・・・など
73
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
セキュリティ関連の別の仕様書
▸ RFC 6819 - OAuth 2.0 Threat Model and
Security Considerations
▸ RFC 7009 : OAuth 2.0 Token Revocation
74
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
まとめ
▸ まずはOAuth 2.0そのものの理解が⼤事
▸ Spring Security 5.1はクライアント機能と

リソースサーバー機能に対応
▸ 認可サーバーはSpring Security 5.2以降
▸ 現時点ではSpring Security OAuth2、既存のサービス、

既成の認可サーバーのいずれかを使う
75
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
参考資料
▸ 基礎からのOAuth 2.0
▸ JWTによるJSONに対する電⼦署名と、そのユースケース
▸ Spring Security Reference
▸ Securing OAuth 2.0 Resources in Spring Security 5
▸ RFC 6749 - The OAuth 2.0 Authorization Framework
▸ RFC 7519 - JSON Web Token (JWT)
▸ Spring Boot 1/2のアプリにKeycloakのOpenID Connectを使ってシングルサイ
ンオン
▸ SpringでOAuth 2.0 OpenID Connect 1.0を使う
76
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
研修、受けたくなりました?
▸ Pivotal認定Core Spring (4⽇間)
① 2019年1⽉10⽇・11⽇・17⽇・18⽇
② 2019年3⽉11⽇・12⽇・27⽇・28⽇
▸ Spring Security⼊⾨ (1⽇間)
① 2019年1⽉30⽇
② 2019年3⽉1⽇
77
https://www.casareal.co.jp/ls/service/openseminar/java
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
アンケート、お願いします!
78
アンケートへのリンク
(C) CASAREAL, Inc. All rights reserved.
#jsug #sf_h4
Enjoy OAuth 2.0 & Spring Security 5.1!!
▸ ご清聴ありがとうございました!
79

More Related Content

What's hot

Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
Taku Miyakawa
 
Spring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjugSpring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjug
Masatoshi Tada
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
Yahoo!デベロッパーネットワーク
 
NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話
Hitachi, Ltd. OSS Solution Center.
 
Keycloakの最近のトピック
Keycloakの最近のトピックKeycloakの最近のトピック
Keycloakの最近のトピック
Hitachi, Ltd. OSS Solution Center.
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
 
Ingress on Azure Kubernetes Service
Ingress on Azure Kubernetes ServiceIngress on Azure Kubernetes Service
Ingress on Azure Kubernetes Service
Toru Makabe
 
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajpAt least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
Yahoo!デベロッパーネットワーク
 
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDayマイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
都元ダイスケ Miyamoto
 
RLSを用いたマルチテナント実装 for Django
RLSを用いたマルチテナント実装 for DjangoRLSを用いたマルチテナント実装 for Django
RLSを用いたマルチテナント実装 for Django
Takayuki Shimizukawa
 
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
mosa siru
 
backlogsでもCI/CDする夢を見る
backlogsでもCI/CDする夢を見るbacklogsでもCI/CDする夢を見る
backlogsでもCI/CDする夢を見る
Takeru Maehara
 
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
Trainocate Japan, Ltd.
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
 
DevOps with Database on AWS
DevOps with Database on AWSDevOps with Database on AWS
DevOps with Database on AWS
Amazon Web Services Japan
 
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
AngularとSpring Bootで作るSPA + RESTful Web ServiceアプリケーションAngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
ssuser070fa9
 
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
NTT DATA Technology & Innovation
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
Amazon Web Services Japan
 
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
Yahoo!デベロッパーネットワーク
 
KeycloakでFAPIに対応した高セキュリティなAPIを公開する
KeycloakでFAPIに対応した高セキュリティなAPIを公開するKeycloakでFAPIに対応した高セキュリティなAPIを公開する
KeycloakでFAPIに対応した高セキュリティなAPIを公開する
Hitachi, Ltd. OSS Solution Center.
 

What's hot (20)

Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 
Spring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjugSpring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjug
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
 
NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話
 
Keycloakの最近のトピック
Keycloakの最近のトピックKeycloakの最近のトピック
Keycloakの最近のトピック
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
 
Ingress on Azure Kubernetes Service
Ingress on Azure Kubernetes ServiceIngress on Azure Kubernetes Service
Ingress on Azure Kubernetes Service
 
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajpAt least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
 
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDayマイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
 
RLSを用いたマルチテナント実装 for Django
RLSを用いたマルチテナント実装 for DjangoRLSを用いたマルチテナント実装 for Django
RLSを用いたマルチテナント実装 for Django
 
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
 
backlogsでもCI/CDする夢を見る
backlogsでもCI/CDする夢を見るbacklogsでもCI/CDする夢を見る
backlogsでもCI/CDする夢を見る
 
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
DevOps with Database on AWS
DevOps with Database on AWSDevOps with Database on AWS
DevOps with Database on AWS
 
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
AngularとSpring Bootで作るSPA + RESTful Web ServiceアプリケーションAngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
 
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
 
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
 
KeycloakでFAPIに対応した高セキュリティなAPIを公開する
KeycloakでFAPIに対応した高セキュリティなAPIを公開するKeycloakでFAPIに対応した高セキュリティなAPIを公開する
KeycloakでFAPIに対応した高セキュリティなAPIを公開する
 

Similar to 基礎からのOAuth 2.0とSpring Security 5.1による実装

OAuth Security Workshop 2017 #osw17
OAuth Security Workshop 2017 #osw17OAuth Security Workshop 2017 #osw17
OAuth Security Workshop 2017 #osw17
Tatsuo Kudo
 
Use JWT access-token on Grails REST API
Use JWT access-token on Grails REST APIUse JWT access-token on Grails REST API
Use JWT access-token on Grails REST API
Uehara Junji
 
多要素認証による Amazon WorkSpaces の利用
多要素認証による Amazon WorkSpaces の利用多要素認証による Amazon WorkSpaces の利用
多要素認証による Amazon WorkSpaces の利用
Amazon Web Services Japan
 
Azure Functions あれこれ
Azure Functions あれこれAzure Functions あれこれ
Azure Functions あれこれ
Yasuaki Matsuda
 
2021/03/19 パブリッククラウドを活かす運用プロセス自動化
2021/03/19 パブリッククラウドを活かす運用プロセス自動化2021/03/19 パブリッククラウドを活かす運用プロセス自動化
2021/03/19 パブリッククラウドを活かす運用プロセス自動化
Issei Hiraoka
 
Azure DevOpsとセキュリティ
Azure DevOpsとセキュリティAzure DevOpsとセキュリティ
Azure DevOpsとセキュリティ
Kazushi Kamegawa
 
これで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetup
これで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetupこれで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetup
これで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetup
Masatoshi Tada
 
Azure AD による Web API の 保護
Azure AD による Web API の 保護 Azure AD による Web API の 保護
Azure AD による Web API の 保護
junichi anno
 
Spring Security 5.0 解剖速報
Spring Security 5.0 解剖速報Spring Security 5.0 解剖速報
Spring Security 5.0 解剖速報
Takuya Iwatsuka
 
Azure ADアプリケーションを使用した認証のあれやこれ
Azure ADアプリケーションを使用した認証のあれやこれAzure ADアプリケーションを使用した認証のあれやこれ
Azure ADアプリケーションを使用した認証のあれやこれ
DevTakas
 
20220409 AWS BLEA 開発にあたって検討したこと
20220409 AWS BLEA 開発にあたって検討したこと20220409 AWS BLEA 開発にあたって検討したこと
20220409 AWS BLEA 開発にあたって検討したこと
Amazon Web Services Japan
 
Azure Stack Hybrid DevOpsデモンストレーション
Azure Stack Hybrid DevOpsデモンストレーションAzure Stack Hybrid DevOpsデモンストレーション
Azure Stack Hybrid DevOpsデモンストレーション
Masahiko Ebisuda
 
サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所
サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所
サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所
真吾 吉田
 
Azure Active Directory 利用開始への第一歩
Azure Active Directory 利用開始への第一歩Azure Active Directory 利用開始への第一歩
Azure Active Directory 利用開始への第一歩
Yusuke Kodama
 
MicrosoftのOSSへの取り組み
MicrosoftのOSSへの取り組みMicrosoftのOSSへの取り組み
MicrosoftのOSSへの取り組み
Shinichiro Arai
 
Microsoft Azure のセキュリティ
Microsoft Azure のセキュリティMicrosoft Azure のセキュリティ
Microsoft Azure のセキュリティ
junichi anno
 
Azure AD によるリソースの保護 how to protect and govern resources under the Azure AD
Azure AD によるリソースの保護 how to protect and govern resources under the Azure ADAzure AD によるリソースの保護 how to protect and govern resources under the Azure AD
Azure AD によるリソースの保護 how to protect and govern resources under the Azure AD
junichi anno
 
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~normalian
 
20150704 MS Azure最新 - innovation egg 第4回
20150704 MS Azure最新 - innovation egg 第4回20150704 MS Azure最新 - innovation egg 第4回
20150704 MS Azure最新 - innovation egg 第4回Keiji Kamebuchi
 
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Hitachi, Ltd. OSS Solution Center.
 

Similar to 基礎からのOAuth 2.0とSpring Security 5.1による実装 (20)

OAuth Security Workshop 2017 #osw17
OAuth Security Workshop 2017 #osw17OAuth Security Workshop 2017 #osw17
OAuth Security Workshop 2017 #osw17
 
Use JWT access-token on Grails REST API
Use JWT access-token on Grails REST APIUse JWT access-token on Grails REST API
Use JWT access-token on Grails REST API
 
多要素認証による Amazon WorkSpaces の利用
多要素認証による Amazon WorkSpaces の利用多要素認証による Amazon WorkSpaces の利用
多要素認証による Amazon WorkSpaces の利用
 
Azure Functions あれこれ
Azure Functions あれこれAzure Functions あれこれ
Azure Functions あれこれ
 
2021/03/19 パブリッククラウドを活かす運用プロセス自動化
2021/03/19 パブリッククラウドを活かす運用プロセス自動化2021/03/19 パブリッククラウドを活かす運用プロセス自動化
2021/03/19 パブリッククラウドを活かす運用プロセス自動化
 
Azure DevOpsとセキュリティ
Azure DevOpsとセキュリティAzure DevOpsとセキュリティ
Azure DevOpsとセキュリティ
 
これで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetup
これで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetupこれで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetup
これで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetup
 
Azure AD による Web API の 保護
Azure AD による Web API の 保護 Azure AD による Web API の 保護
Azure AD による Web API の 保護
 
Spring Security 5.0 解剖速報
Spring Security 5.0 解剖速報Spring Security 5.0 解剖速報
Spring Security 5.0 解剖速報
 
Azure ADアプリケーションを使用した認証のあれやこれ
Azure ADアプリケーションを使用した認証のあれやこれAzure ADアプリケーションを使用した認証のあれやこれ
Azure ADアプリケーションを使用した認証のあれやこれ
 
20220409 AWS BLEA 開発にあたって検討したこと
20220409 AWS BLEA 開発にあたって検討したこと20220409 AWS BLEA 開発にあたって検討したこと
20220409 AWS BLEA 開発にあたって検討したこと
 
Azure Stack Hybrid DevOpsデモンストレーション
Azure Stack Hybrid DevOpsデモンストレーションAzure Stack Hybrid DevOpsデモンストレーション
Azure Stack Hybrid DevOpsデモンストレーション
 
サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所
サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所
サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所
 
Azure Active Directory 利用開始への第一歩
Azure Active Directory 利用開始への第一歩Azure Active Directory 利用開始への第一歩
Azure Active Directory 利用開始への第一歩
 
MicrosoftのOSSへの取り組み
MicrosoftのOSSへの取り組みMicrosoftのOSSへの取り組み
MicrosoftのOSSへの取り組み
 
Microsoft Azure のセキュリティ
Microsoft Azure のセキュリティMicrosoft Azure のセキュリティ
Microsoft Azure のセキュリティ
 
Azure AD によるリソースの保護 how to protect and govern resources under the Azure AD
Azure AD によるリソースの保護 how to protect and govern resources under the Azure ADAzure AD によるリソースの保護 how to protect and govern resources under the Azure AD
Azure AD によるリソースの保護 how to protect and govern resources under the Azure AD
 
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
 
20150704 MS Azure最新 - innovation egg 第4回
20150704 MS Azure最新 - innovation egg 第4回20150704 MS Azure最新 - innovation egg 第4回
20150704 MS Azure最新 - innovation egg 第4回
 
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
 

More from Masatoshi Tada

Pivotal認定講師によるSpring Framework 5.1 & Spring Boot 2.1ハンズオン! #jjug_ccc
Pivotal認定講師によるSpring Framework 5.1 & Spring Boot 2.1ハンズオン! #jjug_cccPivotal認定講師によるSpring Framework 5.1 & Spring Boot 2.1ハンズオン! #jjug_ccc
Pivotal認定講師によるSpring Framework 5.1 & Spring Boot 2.1ハンズオン! #jjug_ccc
Masatoshi Tada
 
初めてでも30分で分かるSpring 5 & Spring Boot 2オーバービュー
初めてでも30分で分かるSpring 5 & Spring Boot 2オーバービュー初めてでも30分で分かるSpring 5 & Spring Boot 2オーバービュー
初めてでも30分で分かるSpring 5 & Spring Boot 2オーバービュー
Masatoshi Tada
 
ReactiveだけじゃないSpring 5 & Spring Boot 2新機能解説
ReactiveだけじゃないSpring 5 & Spring Boot 2新機能解説ReactiveだけじゃないSpring 5 & Spring Boot 2新機能解説
ReactiveだけじゃないSpring 5 & Spring Boot 2新機能解説
Masatoshi Tada
 
Java EE 8新機能解説 -Bean Validation 2.0編-
Java EE 8新機能解説 -Bean Validation 2.0編-Java EE 8新機能解説 -Bean Validation 2.0編-
Java EE 8新機能解説 -Bean Validation 2.0編-
Masatoshi Tada
 
JSUG SpringOne 2017報告会
JSUG SpringOne 2017報告会JSUG SpringOne 2017報告会
JSUG SpringOne 2017報告会
Masatoshi Tada
 
とにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みるとにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みる
Masatoshi Tada
 
Java EEでもOAuth 2.0!~そしてPayara Micro on Cloud Foundryで遊ぶ~
Java EEでもOAuth 2.0!~そしてPayara Micro on Cloud Foundryで遊ぶ~Java EEでもOAuth 2.0!~そしてPayara Micro on Cloud Foundryで遊ぶ~
Java EEでもOAuth 2.0!~そしてPayara Micro on Cloud Foundryで遊ぶ~
Masatoshi Tada
 
Spring Data JPAによるデータアクセス徹底入門 #jsug
Spring Data JPAによるデータアクセス徹底入門 #jsugSpring Data JPAによるデータアクセス徹底入門 #jsug
Spring Data JPAによるデータアクセス徹底入門 #jsug
Masatoshi Tada
 
Getting start Java EE Action-Based MVC with Thymeleaf
Getting start Java EE Action-Based MVC with ThymeleafGetting start Java EE Action-Based MVC with Thymeleaf
Getting start Java EE Action-Based MVC with Thymeleaf
Masatoshi Tada
 
Java EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 FallJava EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 Fall
Masatoshi Tada
 
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新
Masatoshi Tada
 
はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)
Masatoshi Tada
 
NetBeansでかんたんJava EE ○分間クッキング! #kuwaccho lt
NetBeansでかんたんJava EE ○分間クッキング! #kuwaccho ltNetBeansでかんたんJava EE ○分間クッキング! #kuwaccho lt
NetBeansでかんたんJava EE ○分間クッキング! #kuwaccho lt
Masatoshi Tada
 
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2Masatoshi Tada
 
JPAの同時実行制御とロック20140518 #ccc_r15 #jjug_ccc
JPAの同時実行制御とロック20140518 #ccc_r15 #jjug_cccJPAの同時実行制御とロック20140518 #ccc_r15 #jjug_ccc
JPAの同時実行制御とロック20140518 #ccc_r15 #jjug_cccMasatoshi Tada
 

More from Masatoshi Tada (15)

Pivotal認定講師によるSpring Framework 5.1 & Spring Boot 2.1ハンズオン! #jjug_ccc
Pivotal認定講師によるSpring Framework 5.1 & Spring Boot 2.1ハンズオン! #jjug_cccPivotal認定講師によるSpring Framework 5.1 & Spring Boot 2.1ハンズオン! #jjug_ccc
Pivotal認定講師によるSpring Framework 5.1 & Spring Boot 2.1ハンズオン! #jjug_ccc
 
初めてでも30分で分かるSpring 5 & Spring Boot 2オーバービュー
初めてでも30分で分かるSpring 5 & Spring Boot 2オーバービュー初めてでも30分で分かるSpring 5 & Spring Boot 2オーバービュー
初めてでも30分で分かるSpring 5 & Spring Boot 2オーバービュー
 
ReactiveだけじゃないSpring 5 & Spring Boot 2新機能解説
ReactiveだけじゃないSpring 5 & Spring Boot 2新機能解説ReactiveだけじゃないSpring 5 & Spring Boot 2新機能解説
ReactiveだけじゃないSpring 5 & Spring Boot 2新機能解説
 
Java EE 8新機能解説 -Bean Validation 2.0編-
Java EE 8新機能解説 -Bean Validation 2.0編-Java EE 8新機能解説 -Bean Validation 2.0編-
Java EE 8新機能解説 -Bean Validation 2.0編-
 
JSUG SpringOne 2017報告会
JSUG SpringOne 2017報告会JSUG SpringOne 2017報告会
JSUG SpringOne 2017報告会
 
とにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みるとにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みる
 
Java EEでもOAuth 2.0!~そしてPayara Micro on Cloud Foundryで遊ぶ~
Java EEでもOAuth 2.0!~そしてPayara Micro on Cloud Foundryで遊ぶ~Java EEでもOAuth 2.0!~そしてPayara Micro on Cloud Foundryで遊ぶ~
Java EEでもOAuth 2.0!~そしてPayara Micro on Cloud Foundryで遊ぶ~
 
Spring Data JPAによるデータアクセス徹底入門 #jsug
Spring Data JPAによるデータアクセス徹底入門 #jsugSpring Data JPAによるデータアクセス徹底入門 #jsug
Spring Data JPAによるデータアクセス徹底入門 #jsug
 
Getting start Java EE Action-Based MVC with Thymeleaf
Getting start Java EE Action-Based MVC with ThymeleafGetting start Java EE Action-Based MVC with Thymeleaf
Getting start Java EE Action-Based MVC with Thymeleaf
 
Java EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 FallJava EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 Fall
 
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新
 
はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)
 
NetBeansでかんたんJava EE ○分間クッキング! #kuwaccho lt
NetBeansでかんたんJava EE ○分間クッキング! #kuwaccho ltNetBeansでかんたんJava EE ○分間クッキング! #kuwaccho lt
NetBeansでかんたんJava EE ○分間クッキング! #kuwaccho lt
 
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
 
JPAの同時実行制御とロック20140518 #ccc_r15 #jjug_ccc
JPAの同時実行制御とロック20140518 #ccc_r15 #jjug_cccJPAの同時実行制御とロック20140518 #ccc_r15 #jjug_ccc
JPAの同時実行制御とロック20140518 #ccc_r15 #jjug_ccc
 

Recently uploaded

TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
iPride Co., Ltd.
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
Sony - Neural Network Libraries
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
atsushi061452
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
yassun7010
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
Toru Tamaki
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
NTT DATA Technology & Innovation
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
Yuuitirou528 default
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 

Recently uploaded (16)

TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 

基礎からのOAuth 2.0とSpring Security 5.1による実装

  • 1. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 Pivotal認定講師が解説! 基礎からのOAuth 2.0と Spring Security 5.1による実装 (株)カサレアル 多⽥真敏 2018年10⽉31⽇ JSUG Spring Fest 1
  • 2. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 このセッションについて ▸ OAuth 2.0の概要およびSpring Security 5.1の 関連機能について、基礎から分かりやすく解説 します ▸ 【中級者向け】Spring Securityの基礎知識はあ ることが前提です ▸ でもSpring Security成分は最後の30%くらい…💦 2 ハッシュタグ
  • 3. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 ⾃⼰紹介 ▸ 多⽥真敏(@suke_masa) ▸ 研修トレーナー@カサレアル ▸ Spring / Java EE / Microservices
 / Cloud Foundry ▸ Pivotal認定講師 ▸ ⽇本Springユーザ会スタッフ ▸ ⽇本GlassFishユーザー会運営メンバー 3
  • 4. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 株式会社カサレアル ▸ 他社には無い⾊々なプログラミング⾔語の研修 を提供しています! 4
  • 5. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 世界⼀ハイレベルなSpring研修 ▸ Pivotal認定 Core Spring (4⽇間) ▸ DI、AOP、Test、JDBC、Tx、Data、Boot、Web、 REST、Security、OAuth 2.0、Actuator ▸ ロジカルな講義+演習で徹底理解 ▸ アーキテクトやリーダー向け 5 https://www.casareal.co.jp/ls/service/openseminar/pivotal/p016
  • 6. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 オリジナルSpring研修 ▸ はじめてのSpring MVCによる
 Webアプリケーション開発 (2⽇間) ▸ エントリー向けSpringの基礎 ▸Spring Security⼊⾨ (1⽇間) ▸ 認証/認可、アーキテクチャー、OAuth 2.0 ▸Spring Batch⼊⾨ (1⽇間) ▸ バッチ処理 6 https://www.casareal.co.jp/ls/service/openseminar/java
  • 7. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 コンテナはじめました ▸ Docker⼊⾨ (1⽇間) ▸ Kubernetes⼊⾨ (1⽇間) 7 https://www.casareal.co.jp/ls/service/openseminar/cloudnative
  • 8. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 11/29 SpringOneハイライト! ▸ 9⽉に⽶国で⾏われたPivotalのカンファレンス
 SpringOne Platformの内容をハイライトで
 ご紹介! ▸ 詳細はこちら 8
  • 9. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 ⽬次 ① OAuth 2.0の基本⽤語 ② アクセストークンの取得 ③ アクセストークンを利⽤した
 リソースアクセス ④ 認可サーバーの実装 ⑤ クライアントの実装 ⑥ リソースサーバーの実装 9
  • 10. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 ⽬次 ① OAuth 2.0の基本⽤語 ② アクセストークンの取得 ③ アクセストークンを利⽤した
 リソースアクセス ④ 認可サーバーの実装 ⑤ クライアントの実装 ⑥ リソースサーバーの実装 10
  • 11. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 OAuth 2.0とは ▸ 認可の流れを規定したプロトコル ▸ RFC 6749 (⽇本語版もある) ▸ OAuth 1.0とは別物 ▸ Struts 1とStruts 2くらい違う ▸ 認証プロトコルOpenID Connect
 のベースになっている 11
  • 12. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 アクセストークンとは ▸ サーバーのデータにアクセスするための許可証 12 アクセス トークン こんにちは!
 楽しみだなー ①リクエスト ②レスポンス クライアント サーバー
  • 13. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 スコープとは 13 スコープ= そのアクセストークンが やれることの範囲
  • 14. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 ID+パスワードじゃダメなの?🤔 ▸ パスワードを持っている⼈は全権限を持つ ▸ 盗んだ⼈は何でもやりたい放題😇 ▸ アクセストークンなら ▸ 盗まれても、そのトークンを無効化すればいいだけ ▸ スコープにより、できることが制限されている 14
  • 15. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 OAuth 2.0の登場⼈物 ① リソースオーナー (Resource Owner) ▸ 情報の持ち主。ほぼ⼈間。 ② リソースサーバー (Resource Server) ▸ 情報を保持するサーバー。 ③ クライアント (Client) ▸ リソースサーバーからもらった情報を扱うアプリケーション。 ④ 認可サーバー (Authorization Server) ▸ ユーザー情報を保持するサーバー。 15 クラス名などで頻出! 正確に理解しましょう
  • 16. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 Twitterの例で登場⼈物まとめ 16 twitter.com こんにちは!
 楽しみだなー リソース
 オーナー クライアント リソースサーバー 認可サーバー 認可 アクセス
 トークン
 付与 アクセス
 トークン つぶやき ※本当はTwitterはOAuth 1.0を使っています
  • 17. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 今回のサンプルアプリ 17 ▸ TODO管理アプリ ▸ 認可サーバー ▸ リソースサーバー ▸ クライアント 請求書作成
 資料郵送 JSON HTML アクセス
 トークン 検証
  • 18. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 18 DEMO ソースコード -> https://github.com/MasatoshiTada/oauth2-with-spring-security-51
  • 19. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 ⽬次 ① OAuth 2.0の基本⽤語 ② アクセストークンの取得 ③ アクセストークンを利⽤した
 リソースアクセス ④ 認可サーバーの実装 ⑤ クライアントの実装 ⑥ リソースサーバーの実装 19
  • 20. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 グラントタイプ(アクセストークンの取得⽅法) ① 認可コード ▸ 主にサーバーサイドWebアプリケーション ② インプリシット ▸ 主にクライアントサイドWebアプリケーション ③ リソースオーナーパスワードクレデンシャル ▸ 主に公式のスマホアプリなど ④ クライアントクレデンシャル ▸ クライアント⾃⾝の情報取得 20 今⽇はコレ
  • 21. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 認可コードとは ▸ アクセストークンの引換券 21 認可サーバークライアント 1. 認可コード発⾏ 2. 認可コード 3. アクセストークン ※このページの図はイメージです。正確な図は後ほど。
  • 22. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 なぜ認可コードが必要? ▸ アクセストークンがWebブラウザに渡らないよ うにするため! ▸ 認可コードとリダイレクトを組み合わせて実現 22
  • 23. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 アクセストークン取得の流れ 23 認可サーバー クライアント リソース
 オーナー Web
 ブラウザ※ ※Webブラウザは、仕様書では「ユーザーエージェント」と記載されています ①初回アクセス ⑤認可コード発⾏+リダイレクト ⑥認可コード ⑦アクセストークン ②認可エンドポイントにリダイレクト 認可 エンドポイント ③認可画⾯ ④認可
  • 24. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 なぜ認可コードが必要? 24 認可サーバー クライアント リソース
 オーナー Web
 ブラウザ ①初回アクセス ⑤認可コード発⾏+リダイレクト ⑥認可コード ⑦アクセストークン ②認可エンドポイントにリダイレクト ③認可画⾯ ④認可 アクセストークンが Webブラウザに 渡らない!
  • 25. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 認可コード発⾏+リダイレクト 25 認可サーバー クライアント ⑤認可コード発⾏+リダイレクト リダイレクト エンドポイント 302 Found Location: https://クライアント/リダ イレクトエンドポイント?code=認可コード GET https://クライアント/リダイレクト エンドポイント?code=認可コード
  • 26. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 認可コードでアクセストークンをリクエスト 26 認可サーバー クライアント ⑥認可コード トークン エンドポイント POST https://認可サーバー/トークンエ ンドポイント grant_type=authorization_code&cod e=認可コード&redirect_uri=リダイレク トエンドポイント
  • 27. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 アクセストークンをレスポンス 27 認可サーバー クライアント ⑦アクセストークン トークン エンドポイント 200 OK { "access_token":"アクセストークン", "expires_in":3600, "refresh_token":"リフレッシュトークン" }
  • 28. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 OAuth 2.0仕様で未定義の部分 28 認可サーバー クライアント リソース
 オーナー Web
 ブラウザ ①初回アクセス ⑤認可コード発⾏+リダイレクト ⑥認可コード ⑦アクセストークン ②認可エンドポイントにリダイレクト ③認可画⾯ ④認可 どう認可するかは決まっていない →開発者が作り込む or ライブラリ依存
  • 29. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 認証が必要な箇所① 29 認可サーバー クライアント リソース
 オーナー Web
 ブラウザ ①初回アクセス ⑤認可コード発⾏+リダイレクト ⑥認可コード ⑦アクセストークン ②認可エンドポイントにリダイレクト ③認可画⾯ ④認可 認可したのは本当にリソースオーナー? →リソースオーナーのID・パスワードで認証
  • 30. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 認証が必要な箇所② 30 認可サーバー クライアント リソース
 オーナー Web
 ブラウザ ①初回アクセス ⑤認可コード発⾏+リダイレクト ⑥認可コード ⑦アクセストークン ②認可エンドポイントにリダイレクト ③認可画⾯ ④認可 認可コードを送ってきたのは本当にクライアント? →client_id・client_secretでBASIC認証 ※client_idとclient_secretは、認可サーバーに事前に発⾏してもらう
  • 31. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 ⽬次 ① OAuth 2.0の基本⽤語 ② アクセストークンの取得 ③ アクセストークンを利⽤した
 リソースアクセス ④ 認可サーバーの実装 ⑤ クライアントの実装 ⑥ リソースサーバーの実装 31
  • 32. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 アクセストークンを利⽤したリソースアクセス 32 認可サーバー クライアント リソース
 オーナー Web
 ブラウザ 請求書作成
 資料郵送 リソース
 サーバー ①リクエスト ③アクセス
  トークン
  検証 ④ユーザー情報やスコープ ⑥レスポンス⑦レスポンス ⑤スコープを
  チェック ②リソースにアクセス
 with アクセストークン
  • 33. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 アクセストークンを利⽤したリソースアクセス 33 認可サーバー クライアント リソース
 オーナー Web
 ブラウザ 請求書作成
 資料郵送 リソース
 サーバー ①リクエスト ③アクセス
  トークン
  検証 ④ユーザー情報やスコープ ⑥レスポンス⑦レスポンス ⑤スコープを
  チェック ②リソースにアクセス
 with アクセストークン GET https://リソースサーバー/foo/bar Authorization: Bearer アクセストークン
  • 34. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 OAuth 2.0で未定義の部分 34 認可サーバー クライアント リソース
 オーナー Web
 ブラウザ 請求書作成
 資料郵送 リソース
 サーバー ①リクエスト ③アクセス
  トークン
  検証 ④ユーザー情報やスコープ ⑥レスポンス⑦レスポンス ⑤スコープを
  チェック ②リソースにアクセス
 with アクセストークン アクセストークンを
 送る部分以外は
 ほとんど未定義
  • 35. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 アクセストークンやスコープの検証⽅法 A) 認可サーバーに問い合わせる(Basic認証など が必要) B) 共有データベースなどを利⽤する C) アクセストークン⾃⾝に情報を含めておく 35 ↑今回はコレ
  • 36. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 JWT (JSON Web Token : ジョット) ▸ 平たく⾔うとアクセストークンの形式の⼀種 ▸ アクセストークン⾃⾝にユーザー情報やスコー プなどの情報を含めることができる ▸ 「.(ピリオド)」で3つの部分に分けられる ▸ それぞれの部分は、JSONをBase64URLでエンコード したもの 36
  • 37. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 JWTの構造 37 eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJzbGcyMG9uOVg2c zZFOExmNDZfQmRuaExHQy1xZnIyMVlvWE9nQVFKRlIwIn0.eyJqdGkiOiI4YzUyN mMzZC03OTA0LTQ2MWItOGU5ZS1jNDE5YTQ1NmFlNDMiLCJleHAiOjE1Mzg4MTM0Mj YsIm5iZiI6MCwiaWF0IjoxNTM4ODEzMTI2LCJpc3MiOiJodHRwOi8vbG9jYWxob3N 0OjkwMDAvYXV0aC9yZWFsbXMvaGVsbG8tYXBpIiwiYXVkIjoidHJhaW5pbmc2LWZy b250LXNlcnZpY2UiLCJzdWIiOiIxYWI5Yjg4Ny0yNDRhLTRjZTktYTBjMy1iZTc2Z GE4NzZiMTQiLCJ0eXAiOiJCZWFyZXIiLCJhenAiOiJ0cmFpbmluZzYtZnJvbnQtc2 VydmljZSIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6IjA4MjU3OTFlLTE 3ODQtNGQxMC1hMjYyLTAzM2U4YmE3OWViMCIsImFjciI6IjEiLCJhbGxvd2VkLW9y aWdpbnMiOlsiaHR0cDovL2xvY2FsaG9zdDo4MDgwIl0sInJlYWxtX2FjY2VzcyI6e yJyb2xlcyI6WyJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIl19LC JyZXNvdXJjZV9hY2Nlc3MiOnsiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWN jb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwidmlldy1wcm9maWxlIl19fSwi c2NvcGUiOiJoZWxsbzpyZWFkIHByb2ZpbGUiLCJwcmVmZXJyZWRfdXNlcm5hbWUiO iJ1c2VyIn0.fH8s3HaOFjC1CiZeWUP2O1AB2ruDPh9VRnFqSkRoM2zCTpqWgrkiQ BKW3r9RQAD_gsZCi3G7s0tQSCmuAMoht7gLgH9rFKzdKhuKiISeDUF7v2baPva8fH VN8zP1YF84XnVxq-zVThXLBdDgTRXWWI0_RG6x- vJVDRv00gvDwPPvA3WxxIGcekuEjl3ChQhFHozDiEglAlN- vlkDV2IvxVtON4GJ1UAwIj9uTpyAoIVY8oOy_0mMuevzxBSXk2HUxWr2Vrvhj3c2a RrchCOHPsDELtX0CmEBj_bU38d1XbHL30Ar7PWGvpPeSkM3mIykR- osPDSXJwq8gUSAda0JeQ ヘッダー ペイロード 電⼦署名
  • 38. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 ペイロードをデコードすると 38※Powered by jwt.io スコープと ユーザー名
  • 39. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 署名を利⽤したJWTの検証 ▸ リソースサーバーは、
 JWTの署名で検証する ▸ 署名は、認可サーバーの秘 密鍵で暗号化されている
 →認可サーバーの公開鍵で 復号化する 39 ※Powered by jwt.io
  • 40. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 JWK (JSON Web Key) ▸ 認可サーバーの公開鍵 の素となる情報が含ま れたJSON ▸ 認可サーバーからJWK Set形式(JWKの配列を含んだ JSON)で取得する 40 JWK Set JWK ※具体的な検証⽅法は下記ブログが参考になります
  OpenID Connect の署名検証
  • 41. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 JWTの弱点と対策 ▸ 弱点:アクセストークンの剥奪が不可能👎 ▸ リソースサーバーが認可サーバーに問い合わせしない ため、認可サーバー側での制御が不可能 ▸ 対策:アクセストークンの有効期限を短くする👌 ▸ だいたい数分間くらい ▸ 期限が切れたらリフレッシュトークンで再取得する 41
  • 42. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 リフレッシュトークン ▸ アクセストークンを再取得するためのトークン ▸ アクセストークン取得時に⼀緒に受け取る 42 200 OK { "access_token":"アクセストークン", "expires_in":300, "refresh_token":"リフレッシュトークン" }
  • 43. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 アクセストークンのリフレッシュ⽅法 43 POST https://認可サーバー/トークンエンドポイント Authorization: Basic <client_id : client_secret> grant_type=refresh_token&refresh_token=リフレッシュ トークン 200 OK { "access_token":"新しいアクセストークン", "expires_in":300, "refresh_token":"リフレッシュトークン" } ※リフレッシュトークンも新しくするかはOAuth 2.0仕様には定められていない
  (Keycloakではリフレッシュトークンも新しくなる)
  • 44. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 ⽬次 ① OAuth 2.0の基本⽤語 ② アクセストークンの取得 ③ アクセストークンを利⽤した
 リソースアクセス ④ 認可サーバーの実装 ⑤ クライアントの実装 ⑥ リソースサーバーの実装 44
  • 45. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 Spring SecurityのOAuth 2.0対応の歴史 ▸ 4.x以前 ▸ 姉妹ライブラリに
 機能が分散していた ▸ Spring Security OAuth2 ▸ Spring Cloud ▸ Spring Social... 45 ▸ 5.0以降 ▸ OAuth 2.0の機能を
 Spring Security
 本体に新規開発 ▸ Spring Security OAuth2はメンテナンス モードへ
 (バグフィックスは継続)
  • 46. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 個⼈的な所⾒ ▸ Spring Security OAuth2は難しすぎる😇 ▸ ドキュメントが少ない ▸ Javadocがほとんど書いてない ▸ 似たような名前のプロパティが多い ▸ OAuth 2.0仕様で未定義な部分の独⾃実装が多い ▸ 作るべきConfigが多い 46
  • 47. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 Spring Security 5のOAuth 2.0対応状況 47 機能 説明 クライアント 5.0で対応済み リソースサーバー 5.1で対応済み 認可サーバー 未対応(5.2以降?)
  • 48. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 認可サーバーを作るには? A) Spring Security OAuth2を利⽤する B) 認可サーバー機能を持ったサービスを利⽤する C) Keycloakなど既成の認可サーバーを利⽤する 48 ↑今回はコレ ※Spring Security OAuth2の例は下記を参照
 https://github.com/Pivotal-Japan/spring-security-oauth-workshop
  • 49. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 Keycloakとは ▸ OAuth2やOpenID Connectに 対応したシングルサインオン基 盤 ▸ Red Hat社がオープンソースで 開発 ▸ https://www.keycloak.org 49
  • 50. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 Keycloakのインストールや設定など ▸ クライアント・ユーザー・スコープ等を設定 ▸ 詳細はブログに書きました ▸ OAuth 2.0 with Spring Security 5.1の認可サーバーとして Keycloakを使う 50
  • 51. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 重要エンドポイント ▸ 認可エンドポイント ▸ http://サーバー名/auth/realms/レルム名/protocol/openid-connect/auth ▸ トークンエンドポイント ▸ http://サーバー名/auth/realms/レルム名/protocol/openid-connect/token ▸ ユーザー情報 ▸ http://サーバー名/auth/realms/レルム名/protocol/openid-connect/userinfo ▸ JWK Set ▸ http://サーバー名/auth/realms/レルム名/protocol/openid-connect/cert 51 クライアントや リソースサーバーから アクセスする
  • 52. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 トークンのレスポンス 52 200 OK { "access_token" : "JWT形式のアクセストークン", "expires_in" : 有効時間(秒単位), "refresh_expires_in" : 有効時間(秒単位), "refresh_token" : "JWT形式のリフレッシュトークン", "scope" : "scope1 scope2 scope3 ...", ... }
  • 53. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 ⽬次 ① OAuth 2.0の基本⽤語 ② アクセストークンの取得 ③ アクセストークンを利⽤した
 リソースアクセス ④ 認可サーバーの実装 ⑤ クライアントの実装 ⑥ リソースサーバーの実装 53
  • 54. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 依存性 54 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <!-- OAuth2クライアント機能 --> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-oauth2-client</artifactId> </dependency> <!-- JWT関連機能 --> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-oauth2-jose</artifactId> </dependency>
  • 55. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 application.yml 55 spring.security.oauth2.client.registration.todo: provider: 任意の名前(.registrationの後にも指定する) client-id: クライアントID client-secret: クライアントシークレット client-name: 任意の名前(画⾯表⽰で使われる) client-authentication-method: クライアント認証⽅法 authorization-grant-type: グラントタイプ redirect-uri: リダイレクトエンドポイントのURL scope: このアプリのスコープをカンマ区切りで指定 ※スペースの都合上でYAML形式で書いていますが、個⼈的にはproperties派です
  • 56. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 application.yml(続き) 56 spring.security.oauth2.client.provider.todo: authorization-uri: 認可エンドポイントのURL token-uri: トークンエンドポイントのURL user-info-uri: ユーザー情報のJSONが返ってくるURL user-name-attribute: JSONの中のユーザー名を表す属性名 user-info-authentication-method: ユーザー情報取得時の認証⽅式 jwk-set-uri: JWK Setが返ってくるURL issuer-uri: 認可サーバーのIssuer Identifier ※Keycloakの場合、issuer-uriを指定すれば他のプロパティは指定不要(user-name-attributeは任意)
  • 57. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 Java Config 57 @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { ... http.oauth2Login() .loginPage("/login") .permitAll(); ... } } OAuth2Loginを有効化
  • 58. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 ログイン画⾯ 58 <html ...> <head>...</head> <body> <h1>OAuth2ログインページ</h1> <a th:href="@{/oauth2/authorization/todo}"> Keycloakでログイン </a> </body> </html> /oauth2/authorization/provider名
  • 59. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 アーキテクチャー概要 59 メモリ OAuth2AuthorizedClient OAuth2
 Access
 Token OAuth2
 Refresh
 Token OAuth2AuthorizedClient OAuth2
 Access
 Token OAuth2
 Refresh
 Token ・・・ OAuth2
 Authorized
 Client
 Service ※Spring Bootを利⽤している場合、
  OAuth2AuthorizedClientServiceは
  Bean定義済になっています 取得・削除・追加
  • 60. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 アクセストークンの取得 60 @Autowired private OAuth2AuthorizedClientService clientService; // OAuth2AuthenticationTokenはAuthentication実装クラス OAuth2AuthenticationToken auth = (OAuth2AuthenticationToken) SecurityContextHolder .getContext().getAuthentication(); // OAuth2AuthorizedClientを取得 OAuth2AuthorizedClient client = clientService.loadAuthorizedClient( auth.getAuthorizedClientRegistrationId(), auth.getName()); // アクセストークンを取得 String token = client.getAccessToken().getTokenValue();
  • 61. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 リソースサーバーにアクセス 61 RestTemplate restTemplate = ...; String token = ...; // "Authorization: Bearer アクセストークン"というヘッダーを追加 HttpHeaders headers = new HttpHeaders(); headers.add(HttpHeaders.AUTHORIZATION, "Bearer " + token); HttpEntity<Object> httpEntity = new HttpEntity<>(headers); // リソースサーバーにリクエストし、レスポンスを受け取る ResponseEntity<String> responseEntity = restTemplate.exchange("http://リソースサーバーのURL", HttpMethod.GET, httpEntity, String.class);
  • 62. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 Spring WebFluxでは… ▸ WebClientだと、アクセストークンのヘッダー への追加やリフレッシュを⾃動的にやってくれ るらしい(未検証) ▸ https://docs.spring.io/spring-security/site/docs/ current/reference/htmlsingle/#servlet-webclient 62
  • 63. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 ログアウト ▸ 必要に応じて認可サーバー からもログアウトする ▸ 認可サーバーのログアウト 処理はLogoutHandlerで実 装する 63 請求書作成
 資料郵送 クライアント リソースサーバー 認可サーバー ログアウト ログアウト
  • 64. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 Keycloakからのログアウト ▸ ログアウトエンドポイントにPOSTでアクセス ▸ 必要なリクエストパラメーターは下記3つ ① クライアントID ② クライアントシークレット ③ リフレッシュトークン 64
  • 65. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 LogoutHandlerの実装 65 private LogoutHandler logoutHandler() { return (request, response, authentication) -> { MultiValueMap<String, String> params = ...; params.add("client_id", クライアントID); params.add("client_secret", クライアントシークレット); params.add("refresh_token", リフレッシュトークン); HttpHeaders headers = new HttpHeaders(); headers.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_FORM_URLENCODED_VALUE); RequestEntity<MultiValueMap<String, String>> requestEntity = new RequestEntity<>(params, headers, HttpMethod.POST, URI.create(Keycloakのログアウトエンドポイント); ResponseEntity<String> responseEntity = restTemplate.exchange(requestEntity, String.class); }; } ※リフレッシュトークンなどの取得方法はソースコード参照
  • 66. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 LogoutHandlerの実装 66 @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { ... http.logout() .addLogoutHandler(logoutHandler()) .invalidateHttpSession(true) .permitAll(); ... } } 作成したLogoutHandlerを追加
  • 67. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 ⽬次 ① OAuth 2.0の基本⽤語 ② アクセストークンの取得 ③ アクセストークンを利⽤した
 リソースアクセス ④ 認可サーバーの実装 ⑤ クライアントの実装 ⑥ リソースサーバーの実装 67
  • 68. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 依存性 68 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <!-- OAuth2リソースサーバー機能 --> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-oauth2-resource-server</ artifactId> </dependency> <!-- JWT関連機能 --> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-oauth2-jose</artifactId> </dependency>
  • 69. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 application.yml 69 spring.security.oauth2.resourceserver.jwt: jwk-set-uri: JWK Setが返ってくるURL issuer-uri: 認可サーバーのIssuer Identifier ※Keycloakの場合、issuer-uriを指定すればjwk-set-uriは指定不要
  • 70. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 JWK Setの取得フロー ① 起動時にissuer_uriで指定されたURLにリク エストを送信する ② レスポンスJSONのjwks_uri属性をJWK Set を取得するURLとする ③ クライアントからの初回アクセス時にJWK Set をリクエストする 70
  • 71. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 Java Config 71 @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { ... http.authorizeRequests() .mvcMatchers("保護対象のURL") .hasAuthority("SCOPE_スコープ名") ...; http.oauth2ResourceServer() .jwt(); ... } }
  • 72. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 最後に 72
  • 73. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 OAuth 2.0のセキュリティ考慮事項 ▸ 秘匿情報が⾶び交うためHTTPS必須 ▸ その他、必ずOAuth 2.0仕様書をチェックしましょ う! ▸ 10.6 認可コードリダイレクトURIの操作 ▸ 10.11 フィッシングアタック ▸ 10.12 クロスサイトリクエストフォージェリ
 ・・・など 73
  • 74. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 セキュリティ関連の別の仕様書 ▸ RFC 6819 - OAuth 2.0 Threat Model and Security Considerations ▸ RFC 7009 : OAuth 2.0 Token Revocation 74
  • 75. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 まとめ ▸ まずはOAuth 2.0そのものの理解が⼤事 ▸ Spring Security 5.1はクライアント機能と
 リソースサーバー機能に対応 ▸ 認可サーバーはSpring Security 5.2以降 ▸ 現時点ではSpring Security OAuth2、既存のサービス、
 既成の認可サーバーのいずれかを使う 75
  • 76. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 参考資料 ▸ 基礎からのOAuth 2.0 ▸ JWTによるJSONに対する電⼦署名と、そのユースケース ▸ Spring Security Reference ▸ Securing OAuth 2.0 Resources in Spring Security 5 ▸ RFC 6749 - The OAuth 2.0 Authorization Framework ▸ RFC 7519 - JSON Web Token (JWT) ▸ Spring Boot 1/2のアプリにKeycloakのOpenID Connectを使ってシングルサイ ンオン ▸ SpringでOAuth 2.0 OpenID Connect 1.0を使う 76
  • 77. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 研修、受けたくなりました? ▸ Pivotal認定Core Spring (4⽇間) ① 2019年1⽉10⽇・11⽇・17⽇・18⽇ ② 2019年3⽉11⽇・12⽇・27⽇・28⽇ ▸ Spring Security⼊⾨ (1⽇間) ① 2019年1⽉30⽇ ② 2019年3⽉1⽇ 77 https://www.casareal.co.jp/ls/service/openseminar/java
  • 78. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 アンケート、お願いします! 78 アンケートへのリンク
  • 79. (C) CASAREAL, Inc. All rights reserved. #jsug #sf_h4 Enjoy OAuth 2.0 & Spring Security 5.1!! ▸ ご清聴ありがとうございました! 79