Redmine
SAML
SSO
GSuite

RedmineをG SuiteでSAML SSOしてみた

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も合わせる必要があるのかもしれないですが確認してません。