SSO対応手順

shibbolethを利用したSSOに対応するための手順です。
現時点では CentOS5 64bit 環境を例に手順を記載しています。
また、ID同期の仕組みを実装していないため、動作検証の際にはアプリ側にShibboleth側と同じID・パスワードでユーザーを作成しておく必要があります。

※ID同期も今後検証していきます。
※下記手順はサムライクラウド検証環境に特化した情報が一部含まれています。順次整備していきますが、ご不明な点はお問合せください。

事前準備

PHP5.3のインストール

SamuraiSSOで利用しているSimpleSAMLphpの動作にPHP 5.2以上が必要です。
また、代理認証スクリプトに php-pear パッケージが必要です。
本手順では、外部リポジトリからPHP 5.3を導入する手順を記載します。

  1. REMIリポジトリ登録
    # cd /tmp
    # wget http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
    # wget http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
    # rpm -ivh epel-release-5-4.noarch.rpm
    # rpm -ivh remi-release-5.rpm
    
  2. インストール
    # yum --enablerepo=remi,epel install php php-pear
    

ホスト名の設定

hostnameコマンドで、適切にホスト名とIPアドレスが設定されていることを確認してください。
ホスト名が正しく設定されていない場合、セットアップおよびSSO動作が正常に機能しない場合があります。

  1. ホスト名
    ホストのFQDNが表示されることを確認してください。
    (検証環境ではsamuraicloud.jp のサブドメインが表示される必要があります。)
    # hostname
    
  2. IPアドレス
    ローカルホスト(127.0.0.1)以外が表示されることを確認します。
    # hostname -i
    

テストユーザーの登録

動作検証の際にはアプリ側にShibboleth側と同じID・パスワードでユーザーを作成しておく必要があります。

※サムライクラウド検証環境のShibbolethを利用して検証を行いたい場合は、事務局までご相談ください。

SamuraiSSO

パッケージインストール

サムライクラウド連携に必要な、SAMLとOAuthのSPがセットになったパッケージです。
SAMLとしてSimpleSAMLphp、OAuthとしてoauth2-phpを利用しています。
(※SimpleSAMLphpはLGPLライセンスのため、パッケージには含まれていません。)

  1. 依存パッケージインストール
    # yum --enablerepo=epel,remi install php-xml php-mcrypt
    
  2. SamuraiSSOパッケージの展開
    下記コマンドでパッケージを展開し、/opt/samuraisso に配置します。
    # tar zxf samuraisso-0.0.1.tgz
    # mv samuraisso-0.0.1 /opt/samuraisso
    
  3. セットアップスクリプト実行
    自動でキーペアの生成とSPの設定を行います。
    # cd /opt/samuraisso/setup/
    # ./setup_samuraisso.sh
    

    動作に必要なSimpleSAMLphpパッケージのダウンロードの確認メッセージが表示されます。
    SimpleSAMLphp package is required. (http://simplesamlphp.googlecode.com/files/simplesamlphp-1.8.2.tar.gz)
    Do you want to download? [y(yes) / n(no)] :
    

    y を選択するとダウンロードが開始し、セットアップパラメータの確認画面が表示されます。
    << SamuraiSSO SAML SP Settings >>
    
      Hostname       : example.samuraicloud.jp
      Base URL       : samuraisso/
      Admin Name     : SamuraiCloud
      Admin Email    : admin@ncwg.jp
      Admin Password : samuraiadmin
      Timezone       : Asia/Tokyo
      Language       : ja
      IdP EntityID   : https://shib.samuraicloud.jp/idp/shibboleth
    
    Are you sure this settings ? [y(yes) / n(no) / c(change)] :
    

    c を選択することでパラメータを変更できます。
    y を選択することで表示されたパラメータでセットアップが開始し、セットアップが完了するとIdPへ登録に必要な情報が表示されます。
    コンソールに表示された情報をIdP管理者まで連絡してください。
  4. 動作確認
    SimpleSAMLphpに含まれるサンプルスクリプトでSAMLが正しく設定できたか動作確認ができます。
    https://example.samuraicloud.jp/samuraisso/example-simple/saml2-example.php

代理認証スクリプトの導入

SAMLに対応していないアプリケーションでも代理認証スクリプトを利用することでSAML対応することができます。

  1. スクリプトの設置
    スクリプトはWEBアクセス可能な状態で配置する必要があります。
    本手順では既にイントール済みのSamuraiSSOパッケージ内の、
    /opt/samuraisso/simplesamlphp/www

    として配置します。
    下記コマンドでパッケージを展開し、配置します。
    # tar zxf proxylogin-0.0.1.tgz
    # mv proxylogin-0.0.1 /opt/samuraisso/simplesamlphp/www/proxylogin
    
  2. 展開したファイル内の代理認証スクリプト(forSimpleSAMLphp.php)を編集し、アプリに合わせてパラメータ類を調整する
    変数名 意味 デフォルト値 備考
    $app_login_url アプリのログインURL - https://example.samuraicloud.jp/login
    $app_top_url ログイン後のトップ画面URL - https://example.samuraicloud.jp/top
    $app_login_id_param ログイン時にPOSTするIDのパラメータ名 - id
    $app_login_pwd_param ログイン時にPOSTするパスワードのパラメータ名 - pw
    $app_login_post_params ログイン時のその他のパラメータ(連想配列) -
    $id_saml_attr_name IDとして使うSAML属性名 urn:oid:1.3.6.1.4.1.5923.1.1.1.6 urn:oid:1.3.6.1.4.1.5923.1.1.1.6 アプリのIDに記号が使えない場合はurn:oid:0.9.2342.19200300.100.1.1を指定してください
    $pwd_saml_attr_name パスワードとして使うSAML属性名 urn:oid:0.9.2342.19200300.100.4.19 urn:oid:0.9.2342.19200300.100.4.19 通常変更の必要ありません
  • スクリプト名は任意のものに変更可能です。(index.php 等)
  1. ログイン
    ログインできるか確認します。
    https://example.samuraicloud.jp/samuraisso/proxylogin/forSimpleSAMLphp.php

Shibboleth SP

パッケージインストール

  1. yum リポジトリ登録
    # cd /etc/yum.repos.d/
    # wget http://download.opensuse.org/repositories/security://shibboleth/CentOS_5/security:shibboleth.repo
    
  2. インストール
    # yum install shibboleth.x86_64
    

設定変更

  1. shibboleth2.xml 編集
    Shibboleth SPの動作に必要な設定を行います。
    下記のようにvi等のエディタで編集します。
    # vi /etc/shibboleth/shibboleth2.xml
    
    1. 23行目
      本SPのentityIDを指定します。サービス毎に固有の値である必要があります。
      サムライクラウド検証環境では、書式を「https://ホスト名/shibboleth-sp」とします。
      <ApplicationDefaults entityID="https://sp.example.org/shibboleth" 
      

         ↓変更(entityIDはサービス毎に固有のものにする)
      <ApplicationDefaults entityID="https://example.samuraicloud.jp/shibboleth-sp" 
      
    2. 43行目
      IdPのentityIDを指定します。
      サムライクラウド検証環境では「https://shib.samuraicloud.jp/idp/shibboleth」となります。
      <SSO entityID="https://idp.example.org/shibboleth" 
           discoveryProtocol="SAMLDS" discoveryURL="https://ds.example.org/DS/WAYF">
      

         ↓変更
      <SSO entityID="https://shib.samuraicloud.jp/idp/shibboleth" >
      
    3. 74行目
      メタデータの取得場所を設定します。
      サムライクラウド検証環境では「http://shib.samuraicloud.jp/idp-metadata.xml」となります。
         ↓新規追加
      <MetadataProvider type="XML" uri="http://shib.samuraicloud.jp/idp-metadata.xml" 
                    backingFilePath="federation-metadata.xml" reloadInterval="7200">
      </MetadataProvider>
      
  2. attribute-map.xml 編集
    SAMLアサーションに含まれる属性地をApache環境変数にマッピングする設定を行います。
    下記のようにvi等のエディタで編集します。
    # vi /etc/shibboleth/attribute-map.xml
    

    代理認証に必要となるcn(ログインID)とuserPassword(パスワード)を追加します。
       ↓新規追加(81-135行目はコメントアウトされています。)
    <Attribute name="urn:oid:0.9.2342.19200300.100.1.1" id="cn"/>
    <Attribute name="urn:oid:0.9.2342.19200300.100.4.19" id="userPassword"/>
    

キーペア(秘密鍵とX.509証明書)作成

SAMLで暗号化に必要なキーペアを作成します。
ここで作成した公開鍵(X.509証明書)をメタデータとして公開します。

  1. キーペア作成
    ホスト名(-h)は環境に合わせて変更してください。
    cd /etc/shibboleth
    ./keygen.sh -f -h example.samuraicloud.jp
    
  2. メタデータ作成
    作成したキーペアからメタデータを作成します。
    ホスト名(-h)とentityID(-e)は環境に合わせて変更してください。
    # cd /etc/shibboleth/
    # ./metagen.sh -c sp-cert.pem -h example.samuraicloud.jp -e "https://example.samuraicloud.jp/shibboleth-sp" > sp-metadata.xml
    

    作成したメタデータををIdP管理者まで送付してください。

サービス再起動

  1. サービス再起動
    サービスを再起動して設定を反映します。
    # service shibd restart
    # service httpd restart
    

代理認証スクリプトの導入

SAMLに対応していないアプリケーションでも代理認証スクリプトを利用することでSAML対応することができます。

  1. スクリプトの設置
    スクリプトはWEBアクセス可能な状態で配置する必要があります。
    本手順では、
    /var/www/html/proxylogin/

    として配置します。
    下記コマンドでSubversionのリポジトリから取得・配置します。
    # tar zxf proxylogin-0.0.1.tgz
    # mv proxylogin-0.0.1 /var/www/html/proxylogin
    
  2. スクリプト(forShibbolethSP.php)を編集し、アプリに合わせてパラメータ類を調整します。
    変数名 意味 デフォルト値 備考
    $app_login_url アプリのログインURL - https://example.samuraicloud.jp/login
    $app_top_url ログイン後のトップ画面URL - https://example.samuraicloud.jp/top
    $app_login_id_param ログイン時にPOSTするIDのパラメータ名 - id
    $app_login_pwd_param ログイン時にPOSTするパスワードのパラメータ名 - pw
    $app_login_post_params ログイン時のその他のパラメータ(連想配列) -
    $id_srv_env_name IDとして使う環境変数名 eppn eppn アプリのIDに記号が使えない場合はcnを指定してください
    $pwd_srv_env_name パスワードとして使う環境変数名 userPassword userPassword 通常変更の必要ありません
  • スクリプト名は任意のものに変更可能です。(index.php 等)
  1. Apache の設定追加
    上記スクリプトをShibbolethでの認証対象とするための設定を追加します。
    下記のようにvi等のエディタで設定を新規作成します。
    # vi /etc/httpd/conf.d/shibsso.conf
    

    以下の内容で設定します。
    <Location /proxylogin>
      AuthType shibboleth
      ShibRequestSetting requireSession 1
      require valid-user
    </Location>
    
  2. 再起動
    設定を反映するために再起動します。
    service httpd restart
    
  3. ログイン
    ログインできるか確認します。
    https://example.samuraicloud.jp/proxylogin/forShibbolethSP.php
  4. ログアウト
    https://example.samuraicloud.jp/Shibboleth.sso/Logout
    上記のURLへアクセスし、
    Status of Local Logout: Logout completed successfully.
    

    と表示されることを確認。