AzureAD for Java

Preview:

Citation preview

ローカルでの ID 管理は大丈夫 ?! よりセキュアでモダンな Java の多要素認証

Yoshio TeradaSenior Java Technical Evangelistyoterada@microsoft.com@yoshioterada

自己紹介

  Java エバンジェリスト  2015 年 7 月 11 日入社

 元 Sun Microsystems 元 Oracle  ハッシュタグ # てらだよしおがんばれ

• 今の認証・認可システム大丈夫 ?• AzureAD を試してみましょう• Java の認証・認可プログラム• サーバ認証モジュールの作成方法• まとめ

今日のアジェンダ

• 今の認証・認可システム大丈夫 ?• AzureAD を試してみましょう• Java の認証・認可プログラム• サーバ認証モジュールの作成方法• まとめ

今日のアジェンダ

パスワードは暗号化すれば安全?

• 総当たり攻撃• 辞書攻撃• パスワードリスト型攻撃• フィッシング

パスワードは暗号化すれば安全?

• ユーザ毎に salt を付加しより強固に

総当たり攻撃 1: <qwrsd!@@#> パスワードが違います2: <sdsaswer> パスワードが違います3: <34sdfs> パスワードが違います4: <sdsaswer> パスワードが違います5: <asas> パスワードが違います6: <qwrsd!@@#> パスワードが違います7: <sdsaswer> パスワードが違います8: <34sdfs> パスワードが違います9: <sdsaswer> パスワードが違います10: <asas> パスワードが違います…………………………………………………………………………….………………………………………….……………………………………..…………………………………..

78: <Password> ログイン成功 !!

未特定な通信元からのアクセス

IP address: 199.34.28.10

IP Address:31.172.30.4

The Onion Router Network

本人の可能性が低い

Yoshio.Terada@Microsoft.com場所 : シアトルTime: 8:29 AM, PST (3:29 PM, UTC) Yoshio.Terada@Microsoft.

com場所:日本Time: 7:54 AM, local time(3:54 PM, UTC)

テナントをまたいた異常なログイン

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

感染デバイスからのログイン

Botnet control center

IP = 199.34.28.10IP = 199.34.28.10

これらを個別に実装するのは大変

Azure AD餅は餅屋にまかせてみません

か?

Azure AD は安全アイデンティティプロバイダーとしての安全性• Azure AD からデータを盗み出すには多くの壁がある

ID/Passw

ord

追加

認証

要素

権限

チェ

ック

・棚

アプ

リケ

ーシ

ョン

認証

•ス

マー

トカ

ード

•電

話応

答•

ワン

タイ

ムパ

スワ

ード

REST API

監査ログ

Machine Learning による分析

•特

権管

理機

能に

よる

管理

特権

の有

効期

限設

定、

棚卸

•Azure AD か

ら情

報を

取得

する

には

、ア

プリ

ケー

ショ

ン自

身も

認証

され

てい

る必

要が

ある

無償 Premium Premium 無償

多要素認証でよりセキュアなアプリに

2種類以上の要素で認証

知識情報 : パスワード / ピン番号

所持情報 : 電話、クレジットカード、ハードウェア・トークン

生体情報 : 指紋認証、網膜スキャンなど

通常のユーザ名・パスワード認証

Mobile Apps

個人が所有するデバイスでも認証

Phone calls Text messages

ALERT

1 4 5 6 7 6

多要素認証用モバイル・アプリ

Microsoft Authenticator

Google Authenticator

多要素認証を利用するとパスワードが漏洩しても

ログインは不可能

• 今の認証・認可システム大丈夫 ?• AzureAD を試してみましょう• Java の認証・認可プログラム• サーバ認証モジュールの作成方法• まとめ

今日のアジェンダ

追加できるアプリの種類は2種類

Web アプリ

ネィティブ・アプリ

通常は“ Web アプリ”を選択

Azure の認証・認可アプリをJSR-196 JASPIC を利用し作りました

https://github.com/yoshioterada/Java-EE-7-Authentication-App-for-AzureAD

GitHub にアップ済み

パッケージ名 概要

cdis ビューのバックエンド処理 (JSF)extensionofPF ビューのテーブル選択処理

entities Graph API の返り値のマッパー

graph Graph API を利用した処理

filter 認可が不要な場合 filter でも可能

jaspic 認証処理の主機能

common プログラム内から認証を有効化

認証モジュールを Web アプリに組み込み可能

ためしたい方への設定手順

GitHub の画面手順に従い Azure AD を設定

web.xml の修正

Azure AD で作成したグループの ID をロールにマッピング

AzureAD-Login { com.yoshio3.jaspic.AzureADLoginModule required;};

login.conf に下記を追加

※ Java EE 参照実装の GlassFish と Payara で動作確認済み

$GF_INSTALL/glassfish/domains/domain1/config/login.conf

• 今の認証・認可システム大丈夫 ?• AzureAD を試してみましょう• Java の認証・認可プログラム• サーバ認証モジュールの作成方法• まとめ

今日のアジェンダ

Java 認証・認可機能をそのまま利用可能

HttpServletRequest httpServletRequest = ……;Principal userPrincipal = httpServletRequest.getUserPrincipal();String loginUserName = userPrincipal.getName();

認証したユーザ名の取得

if(httpServletRequest.isUserInRole("admin”)){ // 管理者権限を持つユーザ} else if (httpServletRequest.isUserInRole(”users”)){ // ユーザ権限を持つユーザ}

ユーザ名の権限 ( ロール ) 取得

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>

ビューの表示・非表示の切り替え

プログラム実行時の

宣言的セキュリティ

@PermitAllpublic class Calculator { @RolesAllowed(“admin”) public void createUser(User user) { //... } @RunAs(“admin") public User getUserInfo(){ //... } @DenyAll public void debugSomething() { //... }}

利用をご検討の方は

ここまでをご理解ください

• 今の認証・認可システム大丈夫 ?• AzureAD を試してみましょう• Java の認証・認可プログラム• サーバ認証モジュールの作成方法• まとめ

今日のアジェンダ

実装の詳細 ( ここから難しい )

認証・認可モジュールの実装

Java SE : JAAS (Java Authentication and Authorization Service)

Java EE : JSR-196 JASPIC(Java Authentication SPI for Containers)

Java SE : JAAS (Java Authentication and Authorization Service)

J2SE 1.3.1 : オプション・パッケージ

J2SE 1.4 : Java SE に統合

J2EE 1.3 : Java EE に統合  ※ Java EE のセキュリティ・モデルに未対応

Java SE : JAAS (Java Authentication and Authorization Service)

Subject

LoginContext

LoginModule

Callback

個人の関連情報をグループ化( ID, グループなど)PrincipalPrincipal ユーザ、パスワードなど

Subject のログイン、ログアウト機能

カスタム・ログイン・モジュールの実装

個人の識別情報の検索 ( ユーザ名、パスワードなど )

Java SE : JAAS (Java Authentication and Authorization Service)

J2EE 1.3 : Java EE に統合

Java EE セキュリティ・モデルに未対応

@RolesAllowed(“admin”)

@PermitAll @DenyAll

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 から利用可能

Java EE : JSR-196 JASPIC(Java Authentication SPI for Containers)

http://download.oracle.com/otndocs/jcp/jaspic-1_1-mrel2-eval-spec/

メッセージ処理モデル

Java EE : JSR-196 JASPIC & JAAS(Java Authentication SPI for Containers)

サーバ認証モジュール (Server Auth Module)

LoginModule

Server Auth Module

LoginModule Bridge( CHAPTER 6)

Java EE : JSR-196 JASPIC & JAAS(Java Authentication SPI for Containers)

サーバ認証モジュール (Server Auth Module)

LoginModule

外部プロトコル(Oauth, SOAP)

ユーザ、パスワードの評価等

( プロトコル非依存 )

javax.security.auth.message.module.ServerAuthModule

<<interface>>ServerAuthModule

+ initialize+ validateRequest+ secureResponse+ cleanSubjectget+ SupportedMessageTypes

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 メソッド内で実装

認証ライブラリ : ADALAzure AD Authentication Library (ADAL) for Java

https://github.com/AzureAD/azure-activedirectory-library-for-java

認可情報 : 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

• 今の認証・認可システム大丈夫 ?• AzureAD を試してみましょう• Java の認証・認可プログラム• サーバ認証モジュールの作成方法• まとめ

今日のアジェンダ

セキュアな Web アプリを作成してください

Azure AD 多要素認証でよりセキュアに

JASPIC で独自認証機能も実装可能

認証モジュールは一度作れば後が楽

ぜひ、ご利用ください

まとめ

Azure AD の利用

構築アプリ

AD を利用中の企業

Office 365 その他

Azure AD

Azure AD を利用した認証・認可

1

オンプレの AD と同期

2

Manage as sin

gle logica

l directory

クラウドからオンプレのAD 管理機能

3

シングル・サインオン

おまけ: DC 間レプリケーション

仮装マシン(DAS)

仮装マシン(node)

仮装マシン(node)

仮装マシン(DAS)

仮装マシン(node)

仮装マシン(node)

JP WEST Region JP EAST Region

Traffic Manager (DNS Base)

(lb-west) (lb-east)

管理サーバ管理サーバ

日本だけで DR 構成が取れるのは国内2リージョンを持つ

だけ

ローカルでの ID 管理は大丈夫 ?! よりセキュアでモダンな Java の多要素認証

Yoshio TeradaSenior Java Technical Evangelistyoterada@microsoft.com@yoshioterada

Recommended