Help us understand the problem. What is going on with this article?

RedmineをG SuiteでSAML SSOしてみた

More than 1 year has passed since last update.

RedmineをG SuiteでSAML SSOしてみた

saml.rbの書き方に苦労したのでメモ

環境

  • redmine プラグイン

https://github.com/chrodriguez/redmine_omniauth_saml

Latest commit 4c8f0b5  on 24 Oct 2017
  • redmine

私の場合、redmineのHOMEは、/var/lib/redmine/plugins/

Environment:
  Redmine version                3.3.0.stable.15581
  Ruby version                   2.3.1-p112 (2016-04-26) [x86_64-linux]
  Rails version                  4.2.6
  Environment                    production
  Database adapter               Mysql2
SCM:
  Subversion                     1.9.7
  Filesystem                     
Redmine plugins:
  redmine_omniauth_saml          0.0.1
  redmine_slack                  0.2
  redmine_work_time              0.3.4
  • G Suite

SAMLアプリ

手順

1.プラグインをインストール

# プラグインディレクトリへ移動
$ cd /var/lib/redmine/plugins/

# プラグインをclone
$ git clone https://github.com/chrodriguez/redmine_omniauth_saml.git

# redmineのHOMEへ移動
$ cd /var/lib/redmine

# プラグインに必要なライブラリをインストール
$ bundle install

# プラグインを適用
$ RAILS_ENV=production bundle exec rake redmine:plugins

2.G SuiteでSAMLアプリを作成

  • ステップ 1 SAML アプリケーションで SSO を有効にする
    「カスタムアプリをセットアップ」

  • ステップ 2/5 Google IdP 情報
    オプション 1
    SSO の URL : これが、saml.rbのidp_sso_target_urlに設定するURL
    https://accounts.google.com/o/saml2/idp?idpid=XXXXXXXXX
    エンティティ ID
    https://accounts.google.com/o/saml2?idpid=XXXXXXXXX
    証明書
    Google_YYYY-MM-DD-00000_SAML2.0
    証明書をダウンロードしておく

  • ステップ 3/5 カスタムアプリの基本情報
    アプリケーション名 *
    redmine
    説明
    redmineのSSO

  • ステップ 4/5 サービス プロバイダの詳細
    ACS の URL * これが、saml.rbのassertion_consumer_service_urlに設定するURL
    https://redmineのドメイン名/auth/saml/callback
    エンティティ ID * これが、saml.rbのissuerに設定するURL
    https://redmineのドメイン名
    開始 URL
    https://redmineのドメイン名
    署名付き応答
    チェックなし
    名前 ID
    基本情報 メインのメールアドレス
    名前 ID の書式
    EMAIL

  • ステップ 5/5
    属性のマッピング
    emailAddress 基本情報 メインのメールアドレス
    first_name 基本情報 姓
    last_name 基本情報 名

  • 最後に、サービスのステータスをオンにするのをお忘れなく

3.フィンガープリント

ダウンロードした証明書をテキストエディタで開いて

https://www.samltool.com/fingerprint.php
ここのサイトのX.509 cert欄に貼り付け
アルゴリズムには、sha1を選択し「Calculate Fingerprint」ボタンを押すと
Formatted FingerPrintに、フィンガープリントが表示される

「Formatted FingerPrint」欄の方をsaml.rbのidp_cert_fingerprintに設定する

4.プラグイン設定

# プラグインのinitializerサンプルをコピー
$ cp /var/lib/redmine/plugins/redmine_omniauth_saml/sample-saml-initializers.rb /var/lib/redmine/config/initializers/saml.rb

saml.rbを編集

/var/lib/redmine/config/initializers/saml.rb
Redmine::OmniAuthSAML::Base.configure do |config|
  config.saml = {
    :assertion_consumer_service_url => "https://redmineのドメイン名/auth/saml/callback", # The redmine application hostname
#   :issuer                         => "https://redmineのドメイン名/saml/metadata",                 # The issuer name
    :issuer                         => "https://redmineのドメイン名",                 # The issuer name
    :single_logout_service_url      => "https://redmineのドメイン名/auth/saml/sls",      # The SLS (logout) callback URL
    :idp_sso_target_url             => "https://accounts.google.com/o/saml2/idp?idpid=XXXXXXXXX", # SSO login endpoint
    :idp_cert_fingerprint           => "フィンガープリント", # SSO ssl certificate fingerprint
    :name_identifier_format         => "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress",
    :signout_url                    => "https://redmineのドメイン名/auth/saml/sls",
    :idp_slo_target_url             => "https://redmineのドメイン名/auth/saml/sls",
    :name_identifier_value          => "mail", # Which redmine field is used as name_identifier_value for SAML logout
    :attribute_mapping              => {
    # How will we map attributes from SSO to redmine attributes
      :login      => 'extra.raw_info.emailAddress',
      :firstname  => 'extra.raw_info.first_name',
      :lastname   => 'extra.raw_info.last_name',
      :mail       => 'extra.raw_info.emailAddress'
    }
  }

  config.on_login do |omniauth_hash, user|
    # Implement any hook you want here
  end
end

5. redmineの管理画面で、Redmine Omniauth SAML pluginの設定

Enable SAML authentication チェックON
Login page text
「G Suite」
Replace Redmine login page  チェックOFF
(これONにしてしまうと、通常ログインできなくなるので注意)
Create users automatically? チェックOFF
(自動で、ユーザーを作成するか? だが、私の場合は、既存のユーザーがあったので、DBを直接更新した、usersのloginカラムをgoogleアカウントのメールアドレスに、そして、created_by_omniauth_samlカラムを1にしたら、引き継げた)

備考

signout_urlやidp_slo_target_urlなど、本来ならプロバイダのログアウトのURLを設定するが、G Suiteには無い?みたいです。/auth/saml/slsを設定しておけば、redmineからはログアウトできました。

redmine_omniauth_samlのsaml.rbのサンプルには、issuerに、/saml/metadataを指定する様になっていましたが、https://redmineのドメイン名までにしています。今の所、挙動には問題ない様です。
変える場合は、SAMLアプリのエンティティ IDも合わせる必要があるのかもしれないですが確認してません。

kaihei777
「ここでの投稿は個人のものであって所属する企業や団体の見解を示すものではありません。」
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away