by MintJams

SAMLとは?

Content Repository バージョン7がリリースされ、ログインの仕組みが変更されました。SAMLについて学び、Content Repository 7でシングルサインオンを体験してみましょう。

SAMLは、ウェブサイトやアプリケーションなどで利用者を認証するために広く利用されています。 今回の記事では、SAMLとは一体何なのか?どのように利用されているのかについて説明します。さらに、Content Repository 7でSAML認証を始めるための構成ファイルの書き方をご紹介します。

SAMLとは?

アプリケーションは利用者を識別することで個人情報やパーソナライズされた情報を表示します。 アプリケーションによっては、利用者の識別情報を外部の認証システムから受け取る仕組みを採用することがあり、アプリケーションが識別情報を受け取るために、認証システムとやりとりするデータを記述するための言語がSAML(Security Assertion Markup Language)です。 現在のSAML 2.0は、OASISという標準規格を策定する国際的な団体によって、2005年に策定されました。 一般的に、SAMLはシングルサインオンを取り入れる目的で利用されます。SAMLを利用すると、一度ログインするだけで複数のアプリケーションを利用できるため、ユーザーエクスペリエンスが向上します。この仕組みをシングルサインオンといいます。

SAMLpとは?

SAMLp(Security Assertion Markup Language Protocol)は、二つのシステム間でセキュリティ情報を交換するために使用されるプロトコルです。SAML規格の拡張版であり、異なるセキュリティードメイン間で認証・認可データを交換するためのXMLベースの形式を定義しています。 SAMLpは、要求応答プロトコルでSAMLを使用するための一連の規則とガイドラインを提供します。HTTPまたはSOAPを使用してSAMLメッセージを伝送および処理する方法を指定し、SAML交換中のIDプロバイダー(IdP)およびサービスプロバイダー(SP)の両方の動作を定義します。 SAMLpでは、IdPはユーザの認証とSAMLアサーションの発行に責任を負い、SPはアサーションに依存してアクセス制御の決定を行います。このプロトコルは、シングルログアウトやエラー処理など、さまざまなシナリオを処理するメカニズムも提供します。 SAMLpは、企業環境におけるシングルサインオンと連携ID管理を可能にするために広く採用されているプロトコルです。

Content Repository 7でSAML認証を始めましょう

Content Repository 7では、ログインの仕組みがSAML認証に変更されました。そのため、SAMLに対応した認証システムが欠かせない存在になっています。既存のSAML認証システムがなければ、Content Repository 7と一緒にKeycloakなどの認証システムを導入いただく必要があります。 SAML認証するために必要な構成ファイルはrepository/etc/saml2.ymlにあります。 まだファイルを作成していない場合は、一度Content Repository 7を起動させましょう。初期値が設定されたファイルが作成されますので、それを編集するのが簡単でおすすめです。 それでは、構成ファイルのパラメーターを見ていきましょう。

repository/etc/saml2.yml: SAML認証の設定例

contextPath: /bin/auth.cgi/saml2
user:
  attributes:
    role:
      name: 'Role'
      adminRole: 'administration'
    memberOf:
      name: 'memberOf'
sp:
  rootURL: https://www.example.org/bin/auth.cgi/saml2
  entityID: ''
  certificate: ''
  privateKey: ''
idp:
  entityID: https://idp.example.org/auth/realms/realm1
  loginURL: https://idp.example.org/auth/realms/realm1/protocol/saml
  logoutURL: https://idp.example.org/auth/realms/realm1/protocol/saml
  logoutResponseURL: ''
  certificate: ''
security:
  willBeSigned: ''
  wantSigned: ''
  willBeEncrypted: ''
  wantEncrypted: ''
organization:
  name: Company name
  displayName: Company name
  url: https://www.example.org
  language: 'ja'
contacts:
  support:
    email: support@example.org
    name: Support
  technical:
    email: technical@example.org
    name: Technical
    
  • contextPathは、SAML認証のためのContent Repository 7のルートコンテキストパスです。
  • user.attributes.role.nameは、ロールを識別する属性名です。
  • user.attributes.role.adminRoleは、ユーザーが管理者であることを識別するロールです。
  • user.attributes.memberOf.nameは、ユーザーの所属するグループを識別する属性名です。
  • strictがtrueの場合、署名または暗号化されていることを期待する場合に、署名または暗号化されていないメッセージを拒否し、SAMLに厳密に従わないメッセージを拒否します。未指定または空白の場合、trueが使用されます。
  • debugがtrueの場合、デバッグモードで動作し、ログにエラーを出力します。未指定または空白の場合、falseが使用されます。
  • sp.rootURLは、Content Repository 7のSAML認証のためのURIです。contextPathへのURIです。
  • sp.entityIDは、Content Repository 7のエンティティ識別子(URI)です。未指定または空白の場合、sp.rootURLと同じURIが使用されます。
  • sp.certificateは、Content Repository 7のX.509公開鍵証明書です。
  • sp.privateKeyは、Content Repository 7の秘密鍵です。
  • idp.entityIDは、IdPのエンティティ識別子(URI)です。
  • idp.loginURLは、Content Repository 7が認証要求メッセージを送信するIdPのURLです。
  • idp.logoutURLは、Content Repository 7がシングルログアウト要求メッセージを送信するIdPのURLです。
  • idp.logoutResponseURLは、Content Repository 7がシングルログアウト応答メッセージを送信するIdPのURLです。未指定または空白の場合、idp.logoutURLと同じURLが使用されます。
  • idp.certificateは、IdPのX.509公開鍵証明書です。
  • security.willBeSignedは、Content Repository 7が送信する際に署名を付けるメッセージのリストです。authnRequestを含む場合、Content Repository 7が送信する<samlp:AuthnRequest>メッセージに署名を付けます。logoutRequestを含む場合、Content Repository 7が送信する<samlp:logoutRequest>メッセージに署名を付けます。logoutResponseを含む場合、Content Repository 7が送信する<samlp:logoutResponse>メッセージに署名を付けます。
  • security.wantSignedは、Content Repository 7が受信する際に署名を要求するメッセージのリストです。messagesを含む場合、Content Repository 7が受信する<samlp:Response>、<samlp:LogoutRequest>、<samlp:LogoutResponse>要素に署名を要求します。assertionsを含む場合、Content Repository 7が受信する<saml:Assertion>要素に署名を要求します。
  • security.willBeEncryptedは、Content Repository 7が送信する際に暗号化するメッセージのリストです。nameIDを含む場合、Content Repository 7が送信する<samlp:logoutRequest>要素のnameIDを暗号化します。
  • security.wantEncryptedは、Content Repository 7が受信する際に暗号化を要求するメッセージのリストです。nameIDを含む場合、Content Repository 7が受信するNameIDが暗号化されていることを要求します。assertionsを含む場合、Content Repository 7が受信するアサーションが暗号化されていることを要求します。
  • organization.nameは、組織の名称です。
  • organization.displayNameは、組織の表示名称です。
  • organization.urlは、組織のURLです。
  • organization.languageは、組織の言語です。
  • contacts.support.emailは、サポート連絡先のメールアドレスです。
  • contacts.support.nameは、サポート連絡先の名称です。
  • contacts.technical.emailは、技術連絡先のメールアドレスです。
  • contacts.technical.nameは、技術連絡先の名称です。

シングルサインオンを体験してみましょう!

この記事では、SAMLとは何か、SAML認証に必要な構成ファイルのパラメーターを調べ、どのように構成ファイルを設定するのかをご紹介させて頂きました。 シングルサインオンを利用すると、複数のContent Repository 7インスタンスがあっても、一度のログインですべてのインスタンスを利用できます。 早速、Content Repository 7を使って、シングルサインオンを体験してみてください。