RedmineをG SuiteでSAML SSOしてみた
saml.rbの書き方に苦労したのでメモ
環境
- redmine プラグイン
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を編集
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も合わせる必要があるのかもしれないですが確認してません。