azuread for java
TRANSCRIPT
![Page 1: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/1.jpg)
ローカルでの ID 管理は大丈夫 ?! よりセキュアでモダンな Java の多要素認証
Yoshio TeradaSenior Java Technical [email protected]@yoshioterada
![Page 2: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/2.jpg)
自己紹介
Java エバンジェリスト 2015 年 7 月 11 日入社
元 Sun Microsystems 元 Oracle ハッシュタグ # てらだよしおがんばれ
![Page 3: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/3.jpg)
• 今の認証・認可システム大丈夫 ?• AzureAD を試してみましょう• Java の認証・認可プログラム• サーバ認証モジュールの作成方法• まとめ
今日のアジェンダ
![Page 4: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/4.jpg)
• 今の認証・認可システム大丈夫 ?• AzureAD を試してみましょう• Java の認証・認可プログラム• サーバ認証モジュールの作成方法• まとめ
今日のアジェンダ
![Page 5: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/5.jpg)
パスワードは暗号化すれば安全?
• 総当たり攻撃• 辞書攻撃• パスワードリスト型攻撃• フィッシング
![Page 6: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/6.jpg)
パスワードは暗号化すれば安全?
• ユーザ毎に salt を付加しより強固に
![Page 7: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/7.jpg)
総当たり攻撃 1: <qwrsd!@@#> パスワードが違います2: <sdsaswer> パスワードが違います3: <34sdfs> パスワードが違います4: <sdsaswer> パスワードが違います5: <asas> パスワードが違います6: <qwrsd!@@#> パスワードが違います7: <sdsaswer> パスワードが違います8: <34sdfs> パスワードが違います9: <sdsaswer> パスワードが違います10: <asas> パスワードが違います…………………………………………………………………………….………………………………………….……………………………………..…………………………………..
78: <Password> ログイン成功 !!
![Page 8: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/8.jpg)
未特定な通信元からのアクセス
IP address: 199.34.28.10
IP Address:31.172.30.4
The Onion Router Network
![Page 9: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/9.jpg)
本人の可能性が低い
[email protected]場所 : シアトルTime: 8:29 AM, PST (3:29 PM, UTC) Yoshio.Terada@Microsoft.
com場所:日本Time: 7:54 AM, local time(3:54 PM, UTC)
![Page 10: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/10.jpg)
テナントをまたいた異常なログイン
IP Address: 199.34.28.10
X Bad username
X Bad password
X Bad password
X Bad password
X Bad usernameX Bad username
X Bad username
X Bad password
![Page 11: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/11.jpg)
感染デバイスからのログイン
Botnet control center
IP = 199.34.28.10IP = 199.34.28.10
![Page 12: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/12.jpg)
これらを個別に実装するのは大変
![Page 13: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/13.jpg)
Azure AD餅は餅屋にまかせてみません
か?
![Page 14: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/14.jpg)
Azure AD は安全アイデンティティプロバイダーとしての安全性• Azure AD からデータを盗み出すには多くの壁がある
ID/Passw
ord
追加
認証
要素
権限
チェ
ック
・棚
卸
アプ
リケ
ーシ
ョン
認証
•ス
マー
トカ
ード
•電
話応
答•
ワン
タイ
ムパ
スワ
ード
REST API
監査ログ
Machine Learning による分析
•特
権管
理機
能に
よる
管理
特権
の有
効期
限設
定、
棚卸
•Azure AD か
ら情
報を
取得
する
には
、ア
プリ
ケー
ショ
ン自
身も
認証
され
てい
る必
要が
ある
無償 Premium Premium 無償
![Page 15: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/15.jpg)
多要素認証でよりセキュアなアプリに
2種類以上の要素で認証
知識情報 : パスワード / ピン番号
所持情報 : 電話、クレジットカード、ハードウェア・トークン
生体情報 : 指紋認証、網膜スキャンなど
![Page 16: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/16.jpg)
通常のユーザ名・パスワード認証
![Page 17: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/17.jpg)
Mobile Apps
個人が所有するデバイスでも認証
Phone calls Text messages
ALERT
1 4 5 6 7 6
![Page 18: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/18.jpg)
多要素認証用モバイル・アプリ
Microsoft Authenticator
Google Authenticator
![Page 19: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/19.jpg)
![Page 20: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/20.jpg)
多要素認証を利用するとパスワードが漏洩しても
ログインは不可能
![Page 21: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/21.jpg)
• 今の認証・認可システム大丈夫 ?• AzureAD を試してみましょう• Java の認証・認可プログラム• サーバ認証モジュールの作成方法• まとめ
今日のアジェンダ
![Page 22: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/22.jpg)
追加できるアプリの種類は2種類
Web アプリ
ネィティブ・アプリ
![Page 23: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/23.jpg)
通常は“ Web アプリ”を選択
![Page 24: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/24.jpg)
Azure の認証・認可アプリをJSR-196 JASPIC を利用し作りました
![Page 25: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/25.jpg)
https://github.com/yoshioterada/Java-EE-7-Authentication-App-for-AzureAD
GitHub にアップ済み
![Page 26: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/26.jpg)
パッケージ名 概要
cdis ビューのバックエンド処理 (JSF)extensionofPF ビューのテーブル選択処理
entities Graph API の返り値のマッパー
graph Graph API を利用した処理
filter 認可が不要な場合 filter でも可能
jaspic 認証処理の主機能
common プログラム内から認証を有効化
認証モジュールを Web アプリに組み込み可能
![Page 27: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/27.jpg)
ためしたい方への設定手順
GitHub の画面手順に従い Azure AD を設定
![Page 28: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/28.jpg)
web.xml の修正
![Page 29: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/29.jpg)
Azure AD で作成したグループの ID をロールにマッピング
![Page 30: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/30.jpg)
AzureAD-Login { com.yoshio3.jaspic.AzureADLoginModule required;};
login.conf に下記を追加
※ Java EE 参照実装の GlassFish と Payara で動作確認済み
$GF_INSTALL/glassfish/domains/domain1/config/login.conf
![Page 31: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/31.jpg)
• 今の認証・認可システム大丈夫 ?• AzureAD を試してみましょう• Java の認証・認可プログラム• サーバ認証モジュールの作成方法• まとめ
今日のアジェンダ
![Page 32: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/32.jpg)
Java 認証・認可機能をそのまま利用可能
![Page 33: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/33.jpg)
HttpServletRequest httpServletRequest = ……;Principal userPrincipal = httpServletRequest.getUserPrincipal();String loginUserName = userPrincipal.getName();
認証したユーザ名の取得
if(httpServletRequest.isUserInRole("admin”)){ // 管理者権限を持つユーザ} else if (httpServletRequest.isUserInRole(”users”)){ // ユーザ権限を持つユーザ}
ユーザ名の権限 ( ロール ) 取得
![Page 34: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/34.jpg)
public boolean isAdmin() { HttpServletRequest httpServletRequest = ……; return httpServletRequest.isUserInRole("admin"); }
管理者権限の有無の検証
<p:dataTable var=“usersingroup” value=“#{indexPage.users}” rendered=“#{indexPage.admin}”> <p:column headerText=“ グループ所属メンバー” > <h:outputText value=“#{usersingroup.displayName}”/> </p:column></p:dataTable>
ビューの表示・非表示の切り替え
![Page 35: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/35.jpg)
プログラム実行時の
宣言的セキュリティ
![Page 36: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/36.jpg)
@PermitAllpublic class Calculator { @RolesAllowed(“admin”) public void createUser(User user) { //... } @RunAs(“admin") public User getUserInfo(){ //... } @DenyAll public void debugSomething() { //... }}
![Page 37: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/37.jpg)
利用をご検討の方は
ここまでをご理解ください
![Page 38: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/38.jpg)
• 今の認証・認可システム大丈夫 ?• AzureAD を試してみましょう• Java の認証・認可プログラム• サーバ認証モジュールの作成方法• まとめ
今日のアジェンダ
![Page 39: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/39.jpg)
実装の詳細 ( ここから難しい )
![Page 40: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/40.jpg)
認証・認可モジュールの実装
Java SE : JAAS (Java Authentication and Authorization Service)
Java EE : JSR-196 JASPIC(Java Authentication SPI for Containers)
![Page 41: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/41.jpg)
Java SE : JAAS (Java Authentication and Authorization Service)
J2SE 1.3.1 : オプション・パッケージ
J2SE 1.4 : Java SE に統合
J2EE 1.3 : Java EE に統合 ※ Java EE のセキュリティ・モデルに未対応
![Page 42: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/42.jpg)
Java SE : JAAS (Java Authentication and Authorization Service)
Subject
LoginContext
LoginModule
Callback
個人の関連情報をグループ化( ID, グループなど)PrincipalPrincipal ユーザ、パスワードなど
Subject のログイン、ログアウト機能
カスタム・ログイン・モジュールの実装
個人の識別情報の検索 ( ユーザ名、パスワードなど )
![Page 43: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/43.jpg)
Java SE : JAAS (Java Authentication and Authorization Service)
J2EE 1.3 : Java EE に統合
Java EE セキュリティ・モデルに未対応
@RolesAllowed(“admin”)
@PermitAll @DenyAll
![Page 44: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/44.jpg)
Java EE : JSR-196 JASPIC(Java Authentication SPI for Containers)
http://download.oracle.com/otndocs/jcp/jaspic-1_1-mrel2-eval-spec/
JAPSPIC で解決!!
Java EE 6 から利用可能
![Page 45: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/45.jpg)
Java EE : JSR-196 JASPIC(Java Authentication SPI for Containers)
http://download.oracle.com/otndocs/jcp/jaspic-1_1-mrel2-eval-spec/
メッセージ処理モデル
![Page 46: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/46.jpg)
Java EE : JSR-196 JASPIC & JAAS(Java Authentication SPI for Containers)
サーバ認証モジュール (Server Auth Module)
LoginModule
Server Auth Module
LoginModule Bridge( CHAPTER 6)
![Page 47: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/47.jpg)
Java EE : JSR-196 JASPIC & JAAS(Java Authentication SPI for Containers)
サーバ認証モジュール (Server Auth Module)
LoginModule
外部プロトコル(Oauth, SOAP)
ユーザ、パスワードの評価等
( プロトコル非依存 )
![Page 48: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/48.jpg)
javax.security.auth.message.module.ServerAuthModule
<<interface>>ServerAuthModule
+ initialize+ validateRequest+ secureResponse+ cleanSubjectget+ SupportedMessageTypes
![Page 49: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/49.jpg)
Azure ADBrowser Web App
authorize token graph
Navigate to your application
Post token and auth code to your application’s redirect URL
No session,send authNrequest
Verifytokensignature
302 redirect for sign in
OpenID Connect request(user signs in)
Set cookie and return user to page they started on
Redeem auth code
Return access token and refresh token
Call the Graph APIvalidate メソッド内で実装
![Page 50: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/50.jpg)
認証ライブラリ : ADALAzure AD Authentication Library (ADAL) for Java
https://github.com/AzureAD/azure-activedirectory-library-for-java
![Page 51: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/51.jpg)
認可情報 : Graph API
OData 3.0 に準拠した RESTful API でユーザ・グループの参照・更新が可能
ユーザ操作例:https://msdn.microsoft.com/Library/Azure/Ad/Graph/api/users-operationsグループ操作例:https://msdn.microsoft.com/Library/Azure/Ad/Graph/api/groups-operations
![Page 52: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/52.jpg)
• 今の認証・認可システム大丈夫 ?• AzureAD を試してみましょう• Java の認証・認可プログラム• サーバ認証モジュールの作成方法• まとめ
今日のアジェンダ
![Page 53: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/53.jpg)
セキュアな Web アプリを作成してください
Azure AD 多要素認証でよりセキュアに
JASPIC で独自認証機能も実装可能
認証モジュールは一度作れば後が楽
ぜひ、ご利用ください
まとめ
![Page 54: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/54.jpg)
Azure AD の利用
構築アプリ
AD を利用中の企業
Office 365 その他
Azure AD
Azure AD を利用した認証・認可
1
オンプレの AD と同期
2
Manage as sin
gle logica
l directory
クラウドからオンプレのAD 管理機能
3
シングル・サインオン
![Page 55: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/55.jpg)
![Page 56: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/56.jpg)
おまけ: DC 間レプリケーション
仮装マシン(DAS)
仮装マシン(node)
仮装マシン(node)
仮装マシン(DAS)
仮装マシン(node)
仮装マシン(node)
JP WEST Region JP EAST Region
Traffic Manager (DNS Base)
(lb-west) (lb-east)
管理サーバ管理サーバ
![Page 57: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/57.jpg)
日本だけで DR 構成が取れるのは国内2リージョンを持つ
だけ
![Page 58: AzureAD for Java](https://reader030.vdocuments.net/reader030/viewer/2022033108/5880ab9a1a28abf32c8b5533/html5/thumbnails/58.jpg)
ローカルでの ID 管理は大丈夫 ?! よりセキュアでモダンな Java の多要素認証
Yoshio TeradaSenior Java Technical [email protected]@yoshioterada