WAS V8.5.5 SAML認証構成ガイド - Liberty Profile編

Similar documents
WAS V8.5.5 SAML認証構成ガイド - Full Profile編

II 1 p.1 1 Servlet 1.1 Web Web WWW HTML CGI Common Gateway Interface Web HTML Web Web CGI CGI CGI Perl, PHP C JavaScript Web CGI HTML 1.2 Servlet Java

II 2 p.2 2 GET POST form action URL Aisatsu 2.1 Servlet GET GET : Query String QueryStringTest.java 1 import java.io.ioexception; 2 import java.io.pri

HTML Java Tips dp8t-asm/java/tips/ Apache Tomcat Java if else f

Web 1 p.2 1 Servlet Servlet Web Web Web Apache Web Servlet JSP Web Apache Tomcat Jetty Apache Tomcat, Jetty Java JDK, Eclipse

HTML Java Tips dp8t-asm/java/tips/ Apache Tomcat Java if else f

CA Federation ご紹介資料

Microsoft PowerPoint - Lecture_3

メディプロ1 Javaサーブレット補足資料.ppt

目次 1. はじめに 当ドキュメントについて 環境設計 フロー モデルの設計 ログイン タイプの決定 その他情報の決定 IBM Connections Cloud との

Java演習(4) -- 変数と型 --

Web JavaScript Java Applet Flash ActionScript CGI (C, perl, ruby ) PHP Servlet, JSP (JavaServer Pages) ASP 7-2

NAC(CCA): ACS 5.x 以降を使用した Clean Access Manager での認証の設定

PowerPoint プレゼンテーション

Oracle SOA Suite 11gコンポジットに対するSOASchedulerの構成

Servlet JSP JSP Servlet/JSP における 日 本 語 の 処 理 - 1

スライド 1

Active Directory フェデレーションサービスとの認証連携

intra-mart Accel Platform — イベントナビゲータ 開発ガイド   初版  

K227 Java 2

intra-mart WebPlatform/AppFramework

OSSTechドキュメント

(Microsoft PowerPoint - WQ21JDEadapter\215\\\220\254\216\350\217\207\217\221_ ppt)

intra-mart Accel Platform — イベントナビゲータ 開発ガイド   初版   None

Microsoft PowerPoint - Lecture_2

OKTA SAML SSO の設定 ISE 2.3 ゲスト ポータル

Brekeke PBX - Version 2.1 ARSプラグイン開発ガイド

Pirates Buster Series Secure Viewer セットアップマニュアル (Web インストーラ)

TestDesign for Web

DB2 Web Query V2R2M1 導入手順書

IBM FormWave for WebSphere

java.sh Eclipse

1 ユーザ認証を受けた権限で アプリケーションを利用するために ログインプロキシにアクセスします 2 ログインプロキシにより Shibboleth SP から Shibboleth IdP の認証画面にリダイレクトされます 3 ブラウザに認証画面を表示します 4 認証画面にユーザ / パスワードを入

新・明解Java入門

Microsoft PowerPoint - Tutorial_2_upd.ppt

やさしいJavaプログラミング -Great Ideas for Java Programming サンプルPDF

IBM FormWave for WebSphere

desknet s NEO SAML 連携設定手順書 2019 年 1 月 株式会社セシオス 1

はじめに 注意事項 本資料に記載の内容は 弊社が特定の環境において 基本動作や接続動作を確認したものであり すべての環境で機能 性能 信頼性を保証するものではありません 商標一覧 RSA RSA ロゴ SecurID については RSA Security Inc. の米国およびその他の国における商標

Android Layout SDK プログラミング マニュアル

IBM Presentations: Smart Planet Template

VPN 接続の設定

スライド 1

IBM FormWave for WebSphere 公開技術文書 #FWTEC0012 リッチ ユーザーインターフェースのクライア ント操作画面サンプルでブランク伝票が一覧に すべて表示されない問題の対処方法 最終更新日 :2009/11/20 Copyright International Bu

IBM Rational Software Delivery Platform v7.0 What's

Web Servlet/JSP JSP

Password Manager Pro スタートアップガイド

Oracle Universal Content Management ドキュメント管理 クイック・スタート・チュ-トリアル

intra-mart Accel Platform

WESB MTOM機能ガイド

--- サーバ側処理 Java servlet の例 // 通常の Java servlet での POST で受信と同じ protected void dopost(httpservletrequest request, HttpServletResponse response) throws S

RADIUS サーバを使用して NT のパスワード期限切れ機能をサポートするための Cisco VPN 3000 シリーズ コンセントレータの設定

Procedure-for-Azure-v1.1

SAML認証

SystemDirector Developer's Studio(V3.2) 適用ガイド

intra-mart im-J2EE Framework

ROBOTID_LINEWORKS_guide

Microsoft Word - バーチャルクラス(Blackboard)ログイン方法ガイド.docx

8021.X 認証を使用した Web リダイレクトの設定

Azure 環境 UiPath Orchestrator シングル構成構築手順書 v1.0

GXS-I WebIEAS オペレーション ガイド 版 : 第 1 版 2007 年 01 月 22 日 第 2 版 2011 年 12 月 02 日 第 3 版 2012 年 04 月 27 日 第 4 版 2013 年 06 月 17 日 ( 本書 ) GXS 株式会社 (c) 20

B2-Servlet-0112.PDF

PowerPoint プレゼンテーション

10/ / /30 3. ( ) 11/ 6 4. UNIX + C socket 11/13 5. ( ) C 11/20 6. http, CGI Perl 11/27 7. ( ) Perl 12/ 4 8. Windows Winsock 12/11 9. JAV

Microsoft Windows Internet Explorer は 米国 Microsoft Corporation の 米国およびその他の国における登録商標または商標です Linux は Linus Torvalds 氏の日本およびその他の国における登録商標または商標です Red Hat

IBM i とクラウドのつなぎ 本アイ ビー エム株式会社 Power Systems テクニカル セールス 菅 丈

SpringSecurity

Juniper Networks Corporate PowerPoint Template

HTML/JSP/Servlet... 7 JSP... 7 Servlet Struts Struts Struts FormBean LoginForm

intra-mart Accel Platform — IM-Repository拡張プログラミングガイド   初版  

機能仕様書フォーマット

Microsoft Windows Internet Explorer は 米国 Microsoft Corporation の 米国およびその他の国における登録商標または商標です Linux は Linus Torvalds 氏の日本およびその他の国における登録商標または商標です Red Hat

Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN Exam's Question and Answers 1 from Ac

Condition DAQ condition condition 2 3 XML key value

Javaセキュアコーディングセミナー2013東京第1回 演習の解説

IBM API Connect 開発者ポータル構成ガイド 1章

OSSTech OpenSSO社内勉強会資料

自己紹介 指崎則夫 ( さしざきのりお ) SCUGJ 運営スタッフ Microsoft MVP

サーブレット (Servlet) とは Web サーバ側で動作する Java プログラム 通常はapache 等のバックグラウンドで動作する Servletコンテナ上にアプリケーションを配置 代表的な Servlet コンテナ Apache Tomcat WebLogic WebSphere Gla

Transcription:

WebSphere Application Server Liberty Profile 版 日本アイ ビー エムシステムズ エンジニアリング株式会社 1 2015 IBM Corporation

Disclaimer この資料は日本アイ ビー エム株式会社ならびに日本アイ ビー エムシステムズ エンジニアリング株式会社の正式なレビューを受けておりません 当資料は 資料内で説明されている製品の仕様を保証するものではありません 資料の内容には正確を期するよう注意しておりますが この資料の内容は 2015 年 12 月現在の情報であり 製品の新しいリリース PTF などによって動作 仕様が変わる可能性があるのでご注意下さい 今後国内で提供されるリリース情報は 対応する発表レターなどでご確認ください IBM IBM ロゴおよび ibm.com は 世界の多くの国で登録された International Business Machines Corporation の商標です 他の製品名およびサービス名等は それぞれ IBM または各社の商標である場合があります 現時点での IBM の商標リストについては www.ibm.com/legal/copytrade.shtml をご覧ください 当資料をコピー等で複製することは 日本アイ ビー エム株式会社ならびに日本アイ ビー エムシステムズ エンジニアリング株式会社の承諾なしではできません 当資料に記載された製品名または会社名はそれぞれの各社の商標または登録商標です Java およびすべての Java 関連の商標およびロゴは Oracle やその関連会社の米国およびその他の国における商標または登録商標です Microsoft, Windows および Windows ロゴは Microsoft Corporation の米国およびその他の国における商標です Linux は Linus Torvalds の米国およびその他の国における登録商標です UNIX は The Open Group の米国およびその他の国における登録商標です 2

目次 1. はじめに 2. Liberrtyプロファイル環境の確認 3. eclipse/wdt 環境の確認 4. Liberty SAML Web SSO 構成の前提 5. samlweb-2.0フィーチャーの追加 6. SamlWebSso20 要素 ~AuthFilter 要素の追加 7. KeyStore 要素の追加 8. WebApplication 要素 ~application-bnd 要素 ~security-role 要素 ~special-subject 要素の追加 9. server.xmlの一例 10.(Webアプリケーション側作業 )web.xmlの編集 11. SPメタデータのエクスポート 12. 環境確認作業 13. 参考 14. SAMLテスト用サンプル サーブレット コード 3

1. はじめに SAML の概要については WAS V8.5.5 SAML 認証構成ガイド (WAS Full Profile 版 ) を参照 Liberty プロファイルでは SAML 仕様で定義される 2 種類の処理フロー (IdP Initiated SSO と SP-Initiated SSO) の両方が利用可能である 参考 SAML 2.0 Web Browser Single-Sign-On http://www-01.ibm.com/support/knowledgecenter/api/content/nl/jajp/ssd28v_8.5.5/com.ibm.websphere.wlp.core.doc/ae/cwlp_saml_web_sso.html 4

2.1 Libertyプロファイル環境の確認 Libertyプロファイルのエディションは問わない バージョンは V8.5.5.7(FixPack7) 以上が必要 以下のコマンドで確認する productinfo.sh/.bat version 実行例 前提として samlweb-2.0 フィーチャーが必要 以下のコマンドで確認する productinfo.sh/.bat featureinfo 実行例 5

2.2 Libertyプロファイル環境の確認 もし samlweb-2.0フィーチャーがないときには以下の手順でインストールする 接続先リポジトリーに samlweb-2.0があることを 以下のコマンドで確認する featuremanager.sh/.bat find samlweb-2.0 出力内容に samlweb-2.0 が含まれていれば OK 接続先リポジトリーから samlweb-2.0をインストールする 以下のコマンドで実行する featuremanager.sh/bat install samlweb-2.0 実行例 6

2.3 Libertyプロファイル環境の確認 samlweb-2.0フィーチャーをインストール後に 結果を確認する 以下のコマンドで確認する productinfo.sh/.bat featureinfo 実行例 7

3. eclipse/wdt 環境の確認 Libertyプロファイルの構成には eclipse/wdt 環境があることが望ましい eclipse (JavaEE IDE) およbWDTのインストール手順については 以下リンク先を参照 参考 新卒関西人のWebSphere 挑戦記 : 1 ~WAS Libertyプロファイルの導入 ~ http://www.ibm.com/developerworks/jp/websphere/library/was/liberty_intro/1.html WDT のバージョンも V8.5.5.7 以上である必要がある 以下の方法で確認する Help>About Eclipse でパネルを開き WDT アイコンをクリックする バージョンを確認する 8

4. Liberty SAML SSO 構成の前提 IdPが適切に構成され ユーザーが定義されていること IdPからエクスポートされたメタデータ ファイル (idpmetadata.xml) が入手できていること SP 側で利用するWebアプリケーションのweb.xmlの編集が可能であること 9

5.1 samlweb-2.0フィーチャーの追加 WDT 上でserver.xmlを開き フィーチャー マネージャーの Add をクリックする Design タブを選択する Add Features パネルのフィルターで saml と入力し samlweb-2.0 を選択する OK をクリックして フィーチャー マネージャーに追加する 10

5.2 samlweb-2.0 フィーチャーの追加 フィーチャー マネージャーに samlweb-2.0 が追加されたのを確認する 11

6.1 SAML Web SS0 2.0 認証 (samlwebsso20) 要素の追加 server.xml で Server Configuration を選択して Add をクリックする Add Element パネルで フィルターに saml と入力し SAMLWeb SSO 2.0 認証 を選択する 12

6.2 SAML Web SS0 2.0 認証 (samlwebsso20) 要素の追加 Server Configuration に SAML Web SSO 2.0 認証 が追加されたことを確認する 必要に応じて その属性値を変更する ( 右図 ) 詳細については以下リンク先 (KnowledgeCenter) を参照のこと http://www-01.ibm.com/support/knowledgecenter/api/content/nl/jajp/ssd28v_8.5.5/com.ibm.websphere.wlp.core.doc/ae/rwlp_config_sa mlwebsso20.html 13

6.3 SAML Web SS0 2.0 認証 (samlwebsso20) 要素の追加 必要に応じて SAML Web SSO 2.0 認証 の設定値を変更する 一般的に 以下の項目は設定が必要である IdPメタデータ ファイル IdPからエクスポートしたidpMetadata.xml の置き場を指定する このファイルの一例を6.5に示す 他の項目は必要に応じて設定する Libertyでは設定しないパラメータは内部のデフォルト値が有効になる SamlWebSso20での設定項目を6.4に示す ( 英文 KnowledgeCenterから引用 ) 詳細については以下リンク先 (KnowledgeCenter) を参照のこと http://www-01.ibm.com/support/knowledgecenter/api/content/nl/jajp/ssd28v_8.5.5/com.ibm.websphere.wlp.core.doc/ae/rwlp_config_sa mlwebsso20.html 14

6.3 補足 (SamlWebSso20 で設定可能な項目一覧 )1/4 注意 前述の通り Liberty では設定しない項目はすべてデフォルト値が有効となる 15

6.3 補足 (SamlWebSso20 で設定可能な項目一覧 )2/4 16

6.3 補足 (SamlWebSso20 で設定可能な項目一覧 )3/4 17

6.3 補足 (SamlWebSso20 で設定可能な項目一覧 )4/4 18

6.4 IdP メタデータ ファイル (idpmetadata.xml) の一例 <?xml version="1.0" encoding="utf-8"?><md:entitydescriptor entityid="https://idp.ise.com:444/was/sps/wassaml/saml20" xmlns:md="urn:oasis:names:tc:saml:2.0:metadata"><md:idpssodescriptor WantAuthnRequestsSigned="true" protocolsupportenumeration="urn:oasis:names:tc:saml:2.0:protocol"><md:keydescriptor use="signing"><keyinfo xmlns="http://www.w3.org/2000/09/xmldsig#"><x509data><x509certificate>miicbzccaxcgawibagieqh26vjanbgkqhkig9w0baqqfadbimqswcqydvqqgewjvuzepma0ga1ue ChMGVGl2b2xpMQ4wDAYDVQQLEwVUQU1lQjEYMBYGA1UEAxMPZmltZGVtby5pYm0uY29tMB4XDTA0MDQxNDIyMjcxMFoXDTE3MTIyMjIyMjcxMFowSDELMAkGA1UEBhMCVVMxDzANBg NVBAoTBlRpdm9saTEOMAwGA1UECxMFVEFNZUIxGDAWBgNVBAMTD2ZpbWRlbW8uaWJtLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAiZ0D1X6rk8+ZwNBTVZt7C85m421 a8a52ksjw40t+jnvblydp/w66ammyd7rb5qgniz5k1p9w8ivm9wbpxc2u/60tfpg0e/q/r/fxegw1k1umnay+5mauvn3p4xucrrfg79ovurvxq7gza1/wop5vbidxzg6i9cvaql29jgi6gyuc AwEAATANBgkqhkiG9w0BAQQFAAOBgQBXiAhxm91I4m+g3YX+dyGc352TSKO8HvAIBkHHFFwIkzhNgO+zLhxg5UMkOg12X9ucW7leZ1IB0Z6+JXBrXIWmU3UPum+QxmlaE0OG9zhp9L EfzsE5+ff+7XpS0wpJklY6c+cqHj4aTGfOhSE6u7BLdI26cZNdzxdhikBMZPgdyQ==</X509Certificate></X509Data></KeyInfo></md:KeyDescriptor><md:KeyDescriptor use="encryption"><keyinfo xmlns="http://www.w3.org/2000/09/xmldsig#"><x509data><x509certificate>miicbzccaxcgawibagieqh26vjanbgkqhkig9w0baqqfadbimqswcqydvqqgewjvuzepma0ga1ue ChMGVGl2b2xpMQ4wDAYDVQQLEwVUQU1lQjEYMBYGA1UEAxMPZmltZGVtby5pYm0uY29tMB4XDTA0MDQxNDIyMjcxMFoXDTE3MTIyMjIyMjcxMFowSDELMAkGA1UEBhMCVVMxDzANBg NVBAoTBlRpdm9saTEOMAwGA1UECxMFVEFNZUIxGDAWBgNVBAMTD2ZpbWRlbW8uaWJtLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAiZ0D1X6rk8+ZwNBTVZt7C85m421 a8a52ksjw40t+jnvblydp/w66ammyd7rb5qgniz5k1p9w8ivm9wbpxc2u/60tfpg0e/q/r/fxegw1k1umnay+5mauvn3p4xucrrfg79ovurvxq7gza1/wop5vbidxzg6i9cvaql29jgi6gyuc AwEAATANBgkqhkiG9w0BAQQFAAOBgQBXiAhxm91I4m+g3YX+dyGc352TSKO8HvAIBkHHFFwIkzhNgO+zLhxg5UMkOg12X9ucW7leZ1IB0Z6+JXBrXIWmU3UPum+QxmlaE0OG9zhp9L EfzsE5+ff+7XpS0wpJklY6c+cqHj4aTGfOhSE6u7BLdI26cZNdzxdhikBMZPgdyQ==</X509Certificate></X509Data></KeyInfo><md:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/></md:KeyDescriptor><md:ArtifactResolutionService Binding="urn:oasis:names:tc:SAML:2.0:bindings:SOAP" Location="https://idp.ise.com:444/was/sps/WASSAML/saml20/soap" index="0" isdefault="true"/><md:singlelogoutservice Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP- Artifact" Location="https://idp.ise.com:444/was/sps/WASSAML/saml20/slo"/><md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://idp.ise.com:444/was/sps/WASSAML/saml20/slo"/><md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:SOAP" Location="https://idp.ise.com:444/was/sps/WASSAML/saml20/soap"/><md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameidformat:persistent</md:NameIDFormat><md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameidformat:transient</md:NameIDFormat><md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameidformat:emailAddress</md:NameIDFormat><md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameidformat:encrypted</md:NameIDFormat><md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat><md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact" Location="https://idp.ise.com:444/was/sps/WASSAML/saml20/login"/><md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://idp.ise.com:444/was/sps/WASSAML/saml20/login"/></md:IDPSSODescriptor><md:Organization><md:OrganizationName xml:lang="ja">ise</md:organizationname><md:organizationdisplayname xml:lang="ja">ise</md:organizationdisplayname><md:organizationurl xml:lang="ja"/></md:organization><md:contactperson contacttype="technical"><md:company>ise</md:company><md:givenname/><md:surname/><md:emailaddress/><md:telephonenumber/></md:contactperson></md:enti tydescriptor> 19

6.5 認証フィルター参照 (AuthFilter) 要素の追加 必須ではないが 一例として SAML SSO 認証で保護するURLを設定する手順を示す server.xmlで SAML Web SSO 2.0 認証 を選択し Add をクリックする ( 右図 ) Add Element パネルで 認証フィルター参照 を 選択し OK をクリックする ( 下図 ) 認証フィルター参照 を選択し Add をクリックする ( 右図 ) 20

6.6 認証フィルター参照 (AuthFilter) 要素の追加 Add Element パネルで 要求 URL を選択する ( 右図 ) 要求 URL の設定値として URLパターン と マッチング タイプ を設定する 21

7.1 鍵ストア (KeyStore) 要素の追加 server.xml で Server Configuration を選択して Add をクリックする Add Element パネルで フィルターに key と入力し 鍵ストア を選択する 22

7.2 鍵ストア (KeyStore) 要素の追加 Server Configuration に 鍵ストア が追加されたことを確認する パスワード ( 右図 ) を入力し Ctrl+S で保管する ロケーション ( 右図 ) の場所に key.jks ファイル が自動的に生成されるので 確認する 23

8.1 Web アプリケーション (WebApplication) 要素の追加 Eclipse/WDT 上で Web アプリケーションを Liberty サーバーに追加すると server.xml に自動で以下のように Web アプリケーション要素が追加される もしなければ 手動で追加する 24

8.2 アプリケーション バインディング (application-bnd) 要素の追加 server.xmlで Webアプリケーション を選択し Add をクリックする ( 下図 ) Add Element パネルで アプリケーション バインディング を選択し OK をクリックする ( 下図 ) アプリケーション バインディング が追加されたことを確認 する ( 右図 ) 25

8.3 セキュリティー ロール (security-role) 要素の追加 server.xmlで アプリケーション バインディング を選択し Add をクリックする ( 下図 ) Add Element パネルで セキュリティー ロール を選択し OK をクリックする ( 下図 ) セキュリティー ロール が追加されたことを確認する セキュリティー ロール名 属性に入力する ( 右図 ) ( ここでは TestingSR とする 後でアプリに設定する ) 26

8.4 特殊対象 (special-subject) 要素の追加 server.xmlで セキュリティー ロール を選択し Add をクリックする ( 下図 ) Add Element パネルで 特殊対象 を選択し OK をクリックする ( 下図 ) 特殊対象 が追加されたことを確認する 特殊対象のタイプ として ALL_AUTHENTICATED _USERS を選択する ( 右図 ) 27

9. server.xml の一例 ここまでの手順により server.xml は以下の様な内容となる <server description="new server"> <featuremanager> <feature>jsp-2.2</feature> <feature>samlweb-2.0</feature> <feature>localconnector-1.0</feature> </featuremanager> <httpendpoint host="*" httpport="9080" httpsport="9443" id="defaulthttpendpoint"/> <samlwebsso20> <authfilter> <requesturl urlpattern="/testproj/*" matchtype="equals"/> </authfilter> </samlwebsso20> <keystore filebased="true" location="${server.output.dir}/resources/security/key.jks" password="password"/> <webapplication id="testproj" location="testproj.war" name="testproj"> <application-bnd> <security-role name="testingsr"> <special-subject type="all_authenticated_users"></special-subject> </security-role> </application-bnd> </webapplication> <applicationmonitor dropinsenabled="true" updatetrigger="mbean" /> </server> 28

10. (Webアプリケーション側作業)web.xmlの編集 Webアプリケーションのweb.xmlファイルで <security-role> および <security-constraint> を設定する (server.xml 側で設定した TestingSR による認証を可能にする ) web.xmlへの追加内容の一例 <security-constraint> <display-name>testingsc</display-name> <web-resource-collection> <web-resource-name>testingwr</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>testingsr</role-name> </auth-constraint> </security-constraint> 29

11. SP メタデータのエクスポート ブラウザから以下の URL にアクセスすると SP メタデータが取得できる https://<hostname>:9443/ibm/saml20/defaultsp/samlmetadata SP メタデータをファイルとして保存し IdP にインポートする (SP メタデータの例を以下に示す ) 30 <?xml version="1.0" encoding="utf-8"?> <md:entitydescriptor xmlns:md="urn:oasis:names:tc:saml:2.0:metadata" entityid="https://sora.makuhari.japan.ibm.com:9443/ibm/saml20/defaultsp"> <md:spssodescriptor AuthnRequestsSigned="true" WantAssertionsSigned="true" protocolsupportenumeration="urn:oasis:names:tc:saml:2.0:protocol"> <md:keydescriptor use="signing"> <ds:keyinfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> <ds:x509data> <ds:x509certificate>miiditccagmgawibagiegworttanbgkqhkig9w0baqsfadbbmqswcqydvqqgewj1czemmaoga1ue ( 中略 ) 1tT+BI3SGw== </ds:x509certificate> </ds:x509data> </ds:keyinfo> </md:keydescriptor> <md:keydescriptor use="encryption"> <ds:keyinfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> <ds:x509data> <ds:x509certificate>miiditccagmgawibagiegworttanbgkqhkig9w0baqsfadbbmqswcqydvqqgewj1czemmaoga1ue ( 中略 ) 1tT+BI3SGw== </ds:x509certificate> </ds:x509data> </ds:keyinfo> </md:keydescriptor> <md:assertionconsumerservice Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://sora.makuhari.japan.ibm.com:9443/ibm/saml20/defaultSP/acs" index="0" isdefault="true" /> </md:spssodescriptor> </md:entitydescriptor>

12.1 環境確認手順の一例 (SP Initiatedフロー ) SP Initiatedフローの確認手順の一例 1SPアプリURLにアクセスするアクセス先 URL 例 : https://sora.makuhari.japan.ibm.com:9443/testproj/testservlet 2IdP 認証 URL にリダイレクトされる リダイレクト先 URL 例 : https://idp.ise.com:444/was/sps/wassaml/saml20/login 3IdP 認証ページでログインする 4SP アプリにリダイレクトされる 31

12.2 環境確認手順の一例 (IdP Initiated フロー ) IdP Initiated フローの確認手順の一例 1IdP 認証 URL にアクセスする IdP に依存する Tivoli Federated Identity Manager の場合の一例は以下の通り https://idp.ise.com:444/was/sps/wassaml/saml20/logininitial?requestbinding=httppost&nameidformat=email&partne rid=https://sora.makuhari.japan.ibm.com:9443/ibm/saml20/defaultsp&target=https://sora.makuhari.japan.ibm.com:94 43/TestProj/TestServlet 2IdP 認証ページでログインする 3SP ACS ページにリダイレクトされ SP アプリにリダイレクトされる 32

13. 参考 SAML 2.0 Web Browser Single-Sign-On ( 再掲 ) 新卒関西人の WebSphere 挑戦記 : 1 ~WAS Liberty プロファイルの導入 ~( 再掲 ) http://www.ibm.com/developerworks/jp/websphere/library/was/liberty_intro/1.html Configuring SAML Web Browser SSO in Liberty SAML web single sign-on version 2.0 http://www-01.ibm.com/support/knowledgecenter/api/content/nl/jajp/ssd28v_8.5.5/com.ibm.websphere.wlp.core.doc/ae/cwlp_saml_web_sso.html http://www-01.ibm.com/support/knowledgecenter/api/content/nl/jajp/ssd28v_8.5.5/com.ibm.websphere.wlp.core.doc/ae/twlp_config_saml_web_sso.html http://www-01.ibm.com/support/knowledgecenter/api/content/nl/jajp/ssd28v_8.5.5/com.ibm.websphere.wlp.core.doc/ae/rwlp_feature_samlweb-2.0.html 33

14. SAML テスト用サーブレット サンプル コード 1/6 package jp.test.servlet; import java.io.ioexception; import java.io.printwriter; import java.util.date; import java.util.list; import java.util.set; import javax.security.auth.subject; import javax.servlet.servletexception; import javax.servlet.annotation.webservlet; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import com.ibm.websphere.security.wssecurityexception; import com.ibm.websphere.security.auth.wssubject; import com.ibm.websphere.security.saml2.saml20attribute; import com.ibm.websphere.security.saml2.saml20token; /** * Servlet implementation class SamlTestServlet */ @WebServlet("/SamlTest") public class SamlTestServlet extends HttpServlet { private static final long serialversionuid = 1L; /** * @see HttpServlet#HttpServlet() */ public SamlTestServlet() { super(); } 34

14. SAML テスト用サーブレット サンプル コード 2/6 /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { response.setcontenttype("text/html; charset=utf-8"); PrintWriter out = response.getwriter(); out.println("<html><head><title>saml 2.0 test sevlet</title></head><body BGCOLOR= "#FFFFEE ">"); out.println("<h1>saml 2.0 test sevlet</h1>"); try { Subject callersubject = WSSubject.getCallerSubject(); Set<Saml20Token> privatecredentials = callersubject.getprivatecredentials(saml20token.class); for (Saml20Token samltoken : privatecredentials) { out.println("<h2>saml 2.0 Token</h2>"); out.println("<table Border= "2 " WIDTH= "65% " BGCOLOR= "#DDDDFF ">"); print(out, "SAML ID", samltoken.getsamlid()); print(out, "SAML Name ID", samltoken.getsamlnameid()); print(out, "SAML Name ID Format", samltoken.getsamlnameidformat()); print(out, "SAML Issuer Name", samltoken.getsamlissuername()); print(out, "SAML Issuer Name Format", samltoken.getsamlissuernameformat()); print(out, "Authentication Method", samltoken.getauthenticationmethod()); print(out, "Authentication Instant", samltoken.getauthenticationinstant()); print(out, "Issue Instant", samltoken.getissueinstant()); print(out, "SAML Expires", samltoken.getsamlexpires()); print(out, "Service Provider ID", samltoken.getserviceproviderid()); print(out, "Subject DNS", samltoken.getsubjectdns()); print(out, "Subject IP Address", samltoken.getsubjectipaddress()); print(out, "Assertion QName", samltoken.getassertionqname().tostring()); print(out, "Audience Restriction", samltoken.getaudiencerestriction().tostring()); print(out, "Confirmation Method", samltoken.getconfirmationmethod().tostring()); 35

14. SAML テスト用サーブレット サンプル コード 3/6 print(out, "Signer Certificate", samltoken.getsignercertificate().tostring()); print(out, "One Time Use", samltoken.isonetimeuse()); print(out, "Proxy Restriction", samltoken.hasproxyrestriction()); print(out, "Proxy Restriction Count", Long.toString(samlToken.getProxyRestrictionCount())); print(out, "Proxy Restriction Audience", samltoken.getproxyrestrictionaudience().tostring()); out.println("</table><br><br>"); out.println("saml 2.0 Attributes"); out.println("<table Border= "2 " WIDTH= "65% " BGCOLOR= "#DDDDFF ">"); List<Saml20Attribute> samlattributes = samltoken.getsamlattributes(); for (Saml20Attribute attribute : samlattributes) { String attributename = attribute.getname(); List<String> attributevalues = attribute.getvaluesasstring(); if (attributevalues.size() > 1) { StringBuilder temp = new StringBuilder("<ul>"); for (String attributevalue : attributevalues) { temp.append("<li>").append(attributevalue).append("</li>"); } temp.append("</ul>"); print(out, attributename, temp.tostring()); } else if (attributevalues.size() == 1) { print(out, attributename, attributevalues.get(0)); } else { print(out, attributename, "<no valuses>"); } } out.println("</table><br><br>"); } } catch (WSSecurityException ex) { ex.printstacktrace(system.out); } out.println("</body></html>"); } 36

14. SAML テスト用サーブレット サンプル コード 4/6 /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { doget(request, response); } private static void print(printwriter out, String name, boolean value) { out.println("<tr><td>" + escapechar(name) + "</td><td>" + (value? "true" : "false") + "</td></tr>"); } private static void print(printwriter out, String name, Date value) { print(out, name, value.tostring()); } private static void print(printwriter out, String name, String value) { out.println("<tr><td>" + escapechar(name) + "</td><td>" + (value == null? "<none>" : escapechar(value)) + "</td></tr>"); } private static String escapechar(string str) { if (str == null str.equals("")) return str; int len = str.length(); for (int i = 0; i < str.length(); i++) { switch (str.charat(i)) { case '<' : // to "<" len += 3; break; case '>' : // to ">" len += 3; break; case '&' : // to "&" len += 4; break; 37

14. SAML テスト用サーブレット サンプル コード 5/6 case '"' : // to """ len += 5; break; } } if (len == str.length()) return str; char ret[] = new char[len]; int j = 0; for (int i = 0; i < str.length(); i++) { switch (str.charat(i)) { case '<' : // to "<" ret[j++] = '&'; ret[j++] = 'l'; ret[j++] = 't'; ret[j++] = ';'; break; case '>' : // to ">" ret[j++] = '&'; ret[j++] = 'g'; ret[j++] = 't'; ret[j++] = ';'; break; case '&' : // to "&" ret[j++] = '&'; ret[j++] = 'a'; ret[j++] = 'm'; ret[j++] = 'p'; ret[j++] = ';'; break; case '"' : // to """ ret[j++] = '&'; ret[j++] = 'q'; ret[j++] = 'u'; ret[j++] = 'o'; ret[j++] = 't'; ret[j++] = ';'; break; 38

14. SAML テスト用サーブレット サンプル コード 6/6 default : ret[j++] = str.charat(i); break; } } return new String(ret); } } 39