Java EE 7 multi factor authentiaction with Microsoft Azure AD

Post on 19-Jan-2017

457 Views

Category:

Technology

4 Downloads

Preview:

Click to see full reader

Transcript

Java Web アプリを Azure AD の力でよりセキュアに

Yoshio TeradaSenior Java Technical Evangelistyoterada@microsoft.com@yoshioterada

自己紹介

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

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

Extreamly Changed !!

今日は Azure AD

.Net の方々だけに使って頂いているのはもったいない

Java Web アプリもAzure AD を利用しよりセキュアに !!

• Java 技術者へも AD のススメ• Java Web アプリのデモ• Java 標準の認証• Azure での実装方法について• まとめ

今日のアジェンダ

• Java 技術者へも AD のススメ• Java Web アプリのデモ• Java 標準の認証• Azure での実装方法について• まとめ

今日のアジェンダ

ミッション・クリティカルなJava システムへオススメ

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

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

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

2種類以上の要素で認証

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

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

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

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

Mobile Apps

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

Phone calls Text messages

ALERT

1 4 5 6 7 6

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

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

ID/Passw

ord

追加

認証

要素

権限

チェ

ック

・棚

アプ

リケ

ーシ

ョン

認証

•ス

マー

トカ

ード

•電

話応

答•

ワン

タイ

ムパ

スワ

ード

REST API

監査ログ

Machine Learning による分析

•特

権管

理機

能に

よる

管理

特権

の有

効期

限設

定、

棚卸

•Azure AD か

ら情

報を

取得

する

には

、ア

プリ

ケー

ショ

ン自

身も

認証

され

てい

る必

要が

ある

無償 Premium Premium 無償

• Java 技術者への AD のススメ• Java Web アプリのデモ• Java 標準の認証• Azure での実装方法について• まとめ

今日のアジェンダ

• Java 技術者への AD のススメ• Java Web アプリのデモ• Java 標準の認証• Azure での実装方法について• まとめ

今日のアジェンダ

認証した情報の取得

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() { //... }}

Java 認証・認可の検証プログラム実装はかんたん

• Java 技術者への AD のススメ• Java Web アプリのデモ• Java 標準の認証• Azure での実装方法について• まとめ

今日のアジェンダ

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

Web アプリ

ネィティブ・アプリ

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

Azure AD の認証・認可処理シーケンス

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 APIOpenID を利用

MS が提供する認証ライブラリAzure AD Authentication Library (ADAL) for Java

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

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

ADAL4J の利用範囲

ADAL4J : Spring を利用したサンプル

https://github.com/Azure-Samples/active-directory-java-webapp-openidconnect

Filter では Java 標準の機能は使えません

@RollAllowed

httpServletRequest.getUserPrincipal()

httpServletRequest.isUserInRole("admin")

@DenyAll @RunAs

JSR-196 JASPIC を利用し自分で作りました

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

GitHub にアップ済み

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

Azure ADBrowser Web App

authorize token graph

Call the Graph API

標準の JAX-RS Client を利用

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

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

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

Java の認証の構成

Java SE : JAAS (Java Authentication and Authorization Service)

Java EE : Realm & Role

Java EE : JSR-196 JASPIC

クラ

イア

ント

サー

バサ

ーバ

Azure ADBrowser Web App

authorize token graph

JASPIC ServerAuthModule で実装

認証モジュールをコンテナに配置可能

パッケージ名 概要

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

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

graph Graph API を利用した処理

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

jaspic 認証処理の主機能

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

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

多要素認証でよりセキュアなアプリを !!Azure AD でシングル・サイン・オンも簡単

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

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

認証モジュールだけの外だしも可能

まとめ

© 2015 Microsoft Corporation. All rights reserved.

top related