目次


社内のシングル・サインオンを Bluemix Web アプリへと拡張する

Comments

組織が所有する Web アプリケーションを Bluemix にデプロイする作業が、いかに迅速かつ容易に行えるかを、次第に多くの組織が理解するようになっています。しかし、これによって多くの会社では、会社の従業員と下請け業者だけが Bluemix でホストされたアプリケーションにアクセスできるようにするために、このアプリケーション用の認証ソリューションを作成するという要件が持ち上がってきます。この要件に対処するには、手作業でネットワーク構成を変更したり、ユーザー・データを複製したりするなどの多くの作業が必要になると思われがちですが、ありがたいことに、このプロセスを簡単なものにするソリューションがあります。それは、会社で使用している SAML Identity Provider (以下、SAML IdP とします) の認証機能を、Bluemix にデプロイされて実行される Web アプリケーションへと拡張するというソリューションです。この記事では、そのソリューションを実装する方法を説明します。

ここで説明するユーザー認証ソリューションは、新しいソフトウェアをインストールする必要もなければ、会社のインフラストラクチャーに変更を加えたり、ユーザー・データを Bluemix に複製したりする必要もなく、実装するのに 1 時間かかりません!

5 つの簡単なステップで、サンプル Bluemix アプリケーションをビルドしてデプロイし、IBM Single Sign On (SSO) サービスを構成して社内の SAML IdP に接続する方法を紹介します。サンプル・アプリケーションは、認証済みユーザーだけがアクセスできるように構成します。そうすれば、社内の Web アプリケーションにログインする場合でも、Bluemix 上で実行されている Web アプリケーションにログインする場合でも、ユーザーのログイン・エクスペリエンスは同じものになります。

ソリューションの動作

このソリューションは、社内で使用している既存の SAML IdP を拡張して、Bluemix 内の SAML SSO サービス・インスタンスと統合します。そのため、Bluemix 上にホストされている Web アプリケーションにユーザーがログインしている間、そのユーザーは会社のネットワークに接続されることになります。

以下の図に示すシナリオは、ユーザーがブラウザーに URL を入力することで、Bluemix 上で実行されている、会社の Web アプリケーションにアクセスするところから始まります。

Bluemix アプリケーションと SAML IdP との間の SAML リダイレクトは、ブラウザーが仲介するようになっているので、Bluemix が会社のイントラネットに直接アクセスする必要はありません。

必要となるもの

この記事のサンプル・アプリケーションをデプロイして構成するには、DevOps Services アカウントが必要です。

社内の SAML IdP を IBM SSO サービスと連動させるには、以下の情報が必要になります。

  • 社内の SAML IdP を使ってログインを開始するための URL
  • 社内の SAML IdP に関する SAML 2.0 IdP メタデータ・ファイル

また、Bluemix から SAML 2.0 サービス・プロバイダーのメタデータ・ファイルをダウンロードする必要もあります。社内の SAML IdP が Bluemix SSO サービスから認証リクエストを受け取るように構成するには、このメタデータ・ファイルを社内の SAML IdP の管理者がインポートする必要があります。

必要となる Bluemix のサービスと DevOps Services

サンプル・アプリケーションをデプロイして構成するには、以下の Bluemix サービスと DevOps Services を利用します。

ステップ 1. Bluemix 上でサンプル Web アプリケーションを作成する

  1. Bluemix にログインします。.
  2. 「DASHBOARD (ダッシュボード)で、「CREATE AN APP (アプリの作成)」をクリックします。
  3. アプリケーションのタイプとして、「WEB」を選択します。
  4. 次のページでは、「Liberty for Java」を選択します。
  5. 「CONTINUE (続行)」をクリックしてアプリケーションに固有の名前を入力し、「FINISH (完了)」をクリックします。数分すると、アプリケーションのステージングが行われます。これで、Java Web サーバー・アプリケーションが Bluemix 上で実行されている状態になります。

ステップ 2. Bluemix 上で SSO サービス・インスタンスを作成する

  1. 「DASHBOARD (ダッシュボード)」で、「USE SERVICES OR APIS (サービスまたは API の使用)」をクリックします。
  2. 「Security (セキュリティー)」セクションから「Single Sign On」を選択します。
  3. 「Add Service (サービスの追加)」ウィンドウの「App (アプリ)」フィールドで、「Leave unbound (アンバインドのまま)」を選択します。「Service name (サービス名)」フィールドは、名前が表示された状態になっています。この名前をそのまま使用するか、変更してから「CREATE (作成)」をクリックします。
  4. 「Welcome (ようこそ)」ウィンドウで、前のウィンドウで指定したサービス名を入力し、「Continue (続行)」をクリックします。
  5. 「Add New Identity Source (新規 ID ソースの追加)」の下に表示されている「SAML Enterprise (SAML エンタープライズ)」をクリックします。
  6. 「Configure Identity Source (ID ソースの構成)」ウィンドウで、記載されている手順に従って SAML エンタープライズ ID ソースを構成します。

ステップ 3. SSO サービス・インスタンスをアプリケーションにバインドする

  1. ステップ 1 で作成したサンプル Web アプリケーションを選択してから、「BIND A SERVICE OR API (サービスまたは API のバインド)」をクリックします。
  2. 使用可能なサービス・インスタンスのリストから、ステップ 2 で作成した SSO サービス・インスタンスの名前を選択します。
  3. アプリケーションを再ステージングするよう促されるので、「RESTAGE (再ステージ)」をクリックします。

ステップ 4. アプリケーションのセキュリティーを構成する

サンプル Web アプリケーションへのアクセスを認証済みユーザーだけに制限するために、以下の手順に従って web.xml ファイルと ibm-application-bnd.xml ファイルを更新します。

ここでは IBM DevOps Services を使用して、サンプル・アプリケーションのコードと構成ファイルに変更を加えます。

  1. アプリケーションの概要ページで、「ADD GIT (GIT の追加)」をクリックします。
  2. プロジェクトの WEB-INF フォルダー内にある web.xml をダブルクリックします。
  3. 以下のサンプル・コードを web.xml ファイルに追加します。web.xml 構成ファイルによって、<url-pattern> タグに指定されたアプリケーション URL にアクセスできるのが、<auth-constraint> タグに指定されたロールだけに制限されます。

    以下のサンプル構成ファイルは、システム内の「すべての認証済み」ユーザー (<role-name>any-authenticated</role-name> として指定されます) に対し、アプリケーションのルート URL (<url-pattern>/*</url-pattern> として指定されます) へのアクセスを許可します。

    url-patternrole-name の値は、アプリケーションのニーズに応じて変更することができます。

    	  <security-constraint>
    	    <display-name>UserConstraint</display-name>
    	    <web-resource-collection>
    	      <web-resource-name>UserCollection</web-resource-name>
    	      <url-pattern>/*</url-pattern>
    	      <http-method>GET</http-method>
    	      <http-method>PUT</http-method>
    	      <http-method>HEAD</http-method>
    	      <http-method>TRACE</http-method>
    	      <http-method>POST</http-method>
    	      <http-method>DELETE</http-method>
    	      <http-method>OPTIONS</http-method>
    	    </web-resource-collection>
    	    <auth-constraint>
    	      <role-name>any-authenticated</role-name>
    	    </auth-constraint>
    	  </security-constraint>
  4. META-INF フォルダー内で、ibm-application-bnd.xml という名前のファイルを見つけるか (存在しない場合は) 追加します。

    以下のコードは、ibm-application-bnd.xml ファイルを使用して、web.xml ファイル内で定義された role-name (any-authenticated) を Liberty プロファイルの subject (ALL_AUTHENTICATED_USERS) にマッピングします。subject は、アプリケーションでの必要に応じて特定のシステム・ユーザーまたはグループに変更することができます。

    	<?xml version="1.0" encoding="UTF-8"?>
    	  <application-bnd xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	        xmlns="http://websphere.ibm.com/xml/ns/javaee"
    	        xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee
    	        http://websphere.ibm.com/xml/ns/javaee/ibm-application-bnd_1_0.xsd"
    	        version="1.0">
    	    <security-role name="any-authenticated">
    	      <special-subject type="ALL_AUTHENTICATED_USERS" />
    	    </security-role>
    	 </application-bnd>

    詳細については、IBM Knowledge Center の「Liberty profile: Authorization」を参照してください。

  5. このサンプル Web アプリケーションは、以下のコードによって、index.jsp ファイルから認証済みユーザーの詳細を読み取ります。
    	<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" session="true"
    	    import="java.util.Set"
    	    import="java.security.Principal"
    	    import="javax.security.auth.Subject"
    	    import="com.ibm.websphere.security.auth.WSSubject"
    	   %>
    	   <%
    	    response.setHeader("Pragma", "no-cache");
    	    response.setHeader("Cache-control", "no-store");
    	    Subject s = WSSubject.getCallerSubject();
    	    String username="unknown";
    	    if (s != null) {
    	        Set<Principal> principals = s.getPrincipals();
    	        if (principals != null & principals.size() > 0) {
    	            // in production this should be html encoded for safety
    	            username = principals.iterator().next().getName();
    	        }
    	    }
    	   %>
    	   <html>
    	      <h3>Hello: <%=username%></h3>
    	      <p class='description'></p> Congratulations! You have successfully configured company SSO for Bluemix Web App!</span>.
    	   </html>

    注:「Getting User and Group Information Programmatically in WebSphere」に、Subject からユーザーの詳細情報を抽出するサンプル・コードが記載されています。

  6. IBM DevOps Services のプロセスを使用して、ここまでの変更をビルドしてデプロイします。

ステップ 5. Bluemix アプリケーションのログインをテストする

  1. 会社のネットワークに接続されていることを確認します。
  2. Web アプリケーションの URL を見つけます。
    1. Bluemix の「DASHBOARD (ダッシュボード)」で、「CF APPS (CF アプリ)」セクションにあるアプリケーションのリストを参照します。
    2. ステップ 2 で作成したアプリケーションをクリックします。これにより、アプリケーションの概要ページが開きます (以下を参照)。「Routes (経路)」の横に表示された URL が、アプリケーションのルート URL です。
  3. Web アプリケーションの URL をブラウザーに入力し、その後に続けて「index.jsp」と入力します。
  4. サインインの方法を選択するよう促されたら、「Sign in with SAML Enterprise (SAMLエンタープライズでサインイン)」を選択します。

    web.xml ファイルでこのページへのアクセスを制限したので、このアプリケーションにバインドされた SSO サービスがアクセス・リクエストをインターセプトして、この SSO サービス・インスタンスに対して構成されているすべての ID ソースを表示します。

    SSO サービスは、SAML Enterprise による認証用に構成されているため、リダイレクト先ページには、「Sign in with SAML Enterprise (SAML エンタープライズでサインイン)」リンクが表示されます。そのリンクをクリックすると、SAML ログイン URL にリダイレクトされます。

    このページの外観は、社内の SAML IdP ログイン・ページがどのように設計されているかによって異なります。

  5. 有効なユーザー ID とパスワードを入力します。
  6. ログインに成功すると、Bluemix SSO サービスによって以下の画面が表示されます。「Allow (許可する)」または「Allow and Remember (許可して記憶する)」をクリックします。
  7. 次に表示されるページは、index.jsp のコンテンツです。これには、ログイン・ユーザーの ID も含まれます。サンプル・アプリケーションの index.jsp ページは、以下のような表示になります。

おめでとうございます!これで、Bluemix サンプル Web アプリケーション対応の SAML IdP を無事に構成することができました。

まとめ

この記事で説明したソリューションを使用すれば、会社で所有する Web アプリケーションを Bluemix にデプロイして、社内の IdP に資格情報が登録されているユーザーだけにアクセスを制限することができます。この認証プロセスでは、ユーザーが Web アプリケーションにアクセスする際には企業のイントラネットへのアクセス権が必要になるため、追加のセキュリティー層が設けられることになります。また、社内の SAML IdP レベルで、きめ細かいアプリケーション固有の認証ポリシーを構成し、保守することも可能です。

このソリューションでは、ユーザー ID 資格情報を Bluemix 環境に複製する必要はありません。そのため、ID リポジトリーが同期していなくても問題が起こることはありません。そして最も重要なこととして、同じブラウザー・セッション内で、社内にデプロイされた Web アプリケーションから Bluemix にデプロイされたアプリケーションへ移行する際に、ユーザーが経験するのは、シームレスなシングル・サインオン・エクスペリエンスです。


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=セキュリティ, Web development, Cloud computing
ArticleID=1018362
ArticleTitle=社内のシングル・サインオンを Bluemix Web アプリへと拡張する
publish-date=10292015