cybozu developer network

カテゴリー内の他の記事

Shibboleth IdP v4 を使って cybozu.com との SAML 認証を設定する

Index

概要

Shibboleth は、学術認証フェデレーション(学認:GakuNin)で利用している、シングルサインオンを実現するためのソフトウェアです。

この記事では、Shibboleth を使って、cybozu.com へのシングルサインオンを行うための設定手順を説明します。
この記事には、cybozu.com との連携に必要な設定箇所のみを記載しています。
Shibboleth IdP サーバーの構築方法の詳細は、貴学にて IdPv4 をインストールする場合の構築手順(外部サイト)を参照してください。
cybozu.com の SAML 認証は、 SP-initiated SSO として動作します。

動作環境

前提条件

  • Shibboleth では IdP(Identify Provider)の機能を利用し、cybozu.com は SP(Service Provider)として動作します。
  • Shibboleth IdP サーバーの構築、および ユーザー情報を管理するサーバーの構築は行われているものとします。

検証環境

この記事では、Shibboleth IdP v4.2.1 で動作を確認しています。

事前準備

手順1:cybozu.com 環境の準備

cybozu.com 環境を用意します。
環境が無い場合は、サイボウズドットコム ストアから試用環境を申し込んで下さい。
「お試しになるサービス」は、任意のサービスを選択してください。 

手順2:ログインユーザーの追加

SAML 認証でログインするユーザーを追加します。
ユーザーを追加する手順は、ユーザーを追加するを参照してください。
この記事では、例としてログイン名が「user」のユーザーを追加します。

手順3:ServiceProvider メタデータファイルのダウンロード

cybozu.com を SP として Shibboleth IdP に登録するためのメタデータをダウンロードします。
このファイルは、あとの手順で使用します。

  1. cybozu.com にログインし、[cybozu.com 共通管理]を開きます。
  2. 「システム管理」の[ログイン]を開きます。
  3. 「SAML認証を有効にする」のチェックボックスを選択します。
  4. 「Service Providerメタデータのダウンロード」をクリックして、メタデータファイルをダウンロードします。
  5. ファイル名を「cybozu-sp-metadata.xml」に変更します。

Shibboleth IdP での設定(IdP 側)

cybozu.com との連携するために、Shibboleth の設定ファイルを変更します。

以降、Shibboleth IdP は /opt/shibboleth-idp/ 以下にインストールされているものとして記載します。
適宜インストールしているディレクトリーに合わせて読み替えてください。

手順1:cybozu.com を SP として登録する

  1. 事前準備でダウンロードしたメタデータファイルを、Shibboleth IdP サーバーに配置します。
    配置する場所:/opt/shibboleth-idp/metadata/cybozu-sp-metadata.xml
  2. /opt/shibboleth-idp/conf/metadata-providers.xml を開きます。
  3. ファイルの末尾に、次の内容を追記して保存します。

手順2:アサーションの暗号化を解除する 

Shibboleth IdP では、すべての SP に対して送信するアサーションは暗号化されます。
参考:特定のSPへのアサーションを暗号化しない設定(外部サイト)

cybozu.com では、アサーションの暗号化が不要なため、暗号化を解除します。
また、レスポンスに署名をするためアサーションへの署名も不要です。

  1. /opt/shibboleth-idp/conf/relying-party.xml を開きます。
  2. <util:list id="shibboleth.RelyingPartyOverrides"> 要素の中に、次の内容を追記して保存します。
    <bean> 要素の c:relyingPartyIds の値は、連携する cybozu.com の URL に変更してください。

手順3:NameID に cybozu.com でユーザーを識別するための要素を入れる

cybozu.com でのSAML 認証では、SAML Response の NameID の値が cybozu.com の「ログイン名」 と一致する必要があります。
Shibboleth では NameID として、ログインのたびに異なる ID(transientId)が割り当てられるため、ユーザーを一意に特定できません。
そのため、cybozu.com のログイン名と一致する値を NameID として受け渡します。

attribute-filter.xml

  1. /opt/shibboleth-idp/conf/attribute-filter.xml を開きます。
  2. <AttributeFilterPolicyGroup> 要素の中に、次の内容を追記して保存します。
    <PolicyRequirementRule> 要素の value の値は、連携する cybozu.com の URL に変更してください。

saml-nameid.xml

  1. /opt/shibboleth-idp/conf/saml-nameid.xml を開きます。
  2. <util:list id="shibboleth.SAML2NameIDGenerators"> 要素の中に、次の内容を追記して保存します。
    • cybozu.com のログイン名に ID を利用する場合
    • cybozu.com のログイン名にメールアドレスを利用する場合

relying-party.xml

  1. /opt/shibboleth-idp/conf/relying-party.xml を開きます。
  2. <util:list id="shibboleth.RelyingPartyOverrides"> 要素の中に、次の内容を追記して保存します。

手順4:Jetty の再起動

Shibboleth IdP の設定を変更したら、Jetty を再起動してください。

# systemctl restart jetty

手順5:SAMLResponse を確認する

SAMLResponse で、NameID のテキストが cybozu.com でユーザーを識別するための要素になっていることを確認します。

  1. 次のコマンドを実行します。
    • --principal:cybozu.com と連携するユーザーのアカウント名
    • --requester:cybozu.com のURL
    # /opt/shibboleth-idp/bin/aacli.sh \
    --principal=user --requester="https://sample.cybozu.com" --saml2
  2. <saml2:Subject> の要素の値が、cybozu.com のログイン名になっていることを確認します。
    たとえば、次の例では、5〜7行目の <saml2:Subject> の要素の値が、cybozu.com のログイン名である「user」になっています。

cybozu.com での設定(SP 側)

手順1:公開鍵の証明書ファイルを取得する

Shibboleth IdP の サーバーから、SAML の署名に利用する公開鍵の証明書ファイルを取得します。
/opt/shibboleth-idp/conf/idp.properties の idp.signing.cert に指定している証明書ファイルです。

手順2:cybozu.com へ Shibboleth IdP の情報を登録する

Identity Provider(IdP)の情報を設定する手順の詳細は、STEP2:cybozu.comでSAML認証を設定するを参照してください。

  1. cybozu.com にログインし、[cybozu.com 共通管理]を開きます。
  2. 「システム管理」の[ログイン]を開きます。
  3. 「SAML認証を有効にする」のチェックボックスを選択します。
  4. IdPの情報を入力します。
    • Identity ProviderのSSOエンドポイントURL
      https://IdPのサーバー名/idp/profile/SAML2/Redirect/SSO
    • cybozu.comからのログアウト後に遷移するURL
      cybozu.comからログアウトした後に表示される IdPのURL
  5. 「証明書を登録する」の[参照]をクリックし、公開鍵の証明書ファイルを指定します。
  6. [保存]をクリックします。

動作確認

SAML認証を使用して cybozu.com にシングルサインオンできることを確認します。
次の操作ができれば完了です。

  • Web ブラウザーで cybozu.com にアクセスすると、IdPの認証に成功し、ログイン後の画面が表示される。
  • 正常にログアウトできる。

SAML 認証の設定に失敗して cybozu.com にログインできなくなった場合には、SAML 認証を回避する URL から cybozu.com にログインして、SAML 認証の設定を見直してください。

このTipsは、2022年11月版 cybozu.com および Shibboleth IdP v4.2.1 で確認した内容です。

記事に関するフィードバック

記事のコメント欄は記事に対するフィードバックをする場となっております。
右の記事フィードバックのためのガイドを参照してコメントしてください。
記事のリンク切れなど、気になる点がある場合も、こちらのフォームからフィードバックいただけますと幸いです。

サインインしてコメントを残してください。