LoginSignup
56
58

More than 5 years have passed since last update.

SSO を実現するための SAML2.0 の実装。まずはサンプルを動かす

Last updated at Posted at 2015-10-07

シングルサインオンに対応するために SAML2.0 に対応する場合もあると思います。

SAML2.0 に対応すると

といったアイデンティティー管理をクラウドで提供しているサービスと連携ができるようになります。

SAML2.0 は、OneLogin提供の ruby-saml を利用すると簡単に実装することができます。

まずはサンプルを動かすところを実施したいと思います。

OneLogin - アカウント作成

サイトの内容に従って、アカウントを作りましょう。

OneLogin - Connector の追加

メニュー > APPS > Add Apps
スクリーンショット 2015-10-07 19.47.48.png

「SAML Test Connector」で検索し「SAML Test Connector(IdP)」をクリックします。
スクリーンショット 2015-10-07 19.49.03.png

「SAVE」をクリックします。変更しても変更しなくてもどちらもで良いです。
スクリーンショット 2015-10-07 19.52.38.png

Coniguration タブを選択し以下を入力し「SAVE」します。

変更箇所 値の取得場所
Audience http://localhost:3000/saml/metadata
Recipient http://localhost:3000/saml/acs
ACS URL Validator ^http:¥/¥/localhost:3000¥/saml¥/acs$
ACS URL http://localhost:3000/saml/acs

スクリーンショット 2015-10-07 19.55.35.png

ruby-saml-example - 取得

にサンプルがあるので clone して bundle install します。

git clone https://github.com/onelogin/ruby-saml-example.git
cd ruby-saml-example
bundle install

ruby-saml-example - 修正

スクリーンショット 2015-10-07 19.59.18.png

上記の OneLogin Connector SSOタブに表示されている情報をもとに以下の箇所を修正します。

変更箇所 値の取得場所
<onelogin-app-id>部分 Issuer URL の最後に書かれている数値部分
settings.idp_cert の値 上記の View Detail で表示される X.509 Certificate
ruby-saml-example/app/models/account.rb
    # IdP section
    settings.idp_entity_id                  = "https://app.onelogin.com/saml/metadata/<onelogin-app-id>"
    settings.idp_sso_target_url             = "https://app.onelogin.com/trust/saml2/http-post/sso/<onelogin-app-id>"
    settings.idp_slo_target_url             = "https://app.onelogin.com/trust/saml2/http-redirect/slo/<onelogin-app-id>"
    settings.idp_cert                       = "-----BEGIN CERTIFICATE-----
MIICbjCCAdegAwIBAgIBADANBgkqhkiG9w0BAQ0FADBUMQswCQYDVQQGEwJ1czET
MBEGA1UECAwKQ2FsaWZvcm5pYTEVMBMGA1UECgwMT25lbG9naW4gSW5jMRkwFwYD
VQQDDBBhcHAub25lbG9naW4uY29tMB4XDTE0MDkxMTE1MDUxMVoXDTE1MDkxMTE1
MDUxMVowVDELMAkGA1UEBhMCdXMxEzARBgNVBAgMCkNhbGlmb3JuaWExFTATBgNV
BAoMDE9uZWxvZ2luIEluYzEZMBcGA1UEAwwQYXBwLm9uZWxvZ2luLmNvbTCBnzAN
BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAsezUGLSiNMXg80EZMMzvXH43f07a1plU
mm1poYvVfgSICTqhEUuA0x4w9w/K4BegO07GVkUjNCrvtJEqq4FMDbHj2VfOCMHx
lYi52/ELXKe6ALSm48y5BG9fd1kGHBqBg741KpMvDkmAbX1sLq5reAjOccIDme2d
lLD8tQ8y0IMCAwEAAaNQME4wHQYDVR0OBBYEFP3cLGEyby7TBXweK0SeFrvnRoHL
MB8GA1UdIwQYMBaAFP3cLGEyby7TBXweK0SeFrvnRoHLMAwGA1UdEwQFMAMBAf8w
DQYJKoZIhvcNAQENBQADgYEAS3vJKRFGjvxOHHNJR77wYlxSSbyb9vmWOVBzaTMd
5TFfoSDxuP9RskRjSrez/63WON6tdYr/mJNSNB70ZAic824Y9feQ/kBaCswI+Pgp
b6sFIh4CrY4yCEkBPD8jXFCeJMq+2AqshbITpiu7WF1RCAp/sRAO56giP/B4l0o0
Tc0=
-----END CERTIFICATE-----"

ruby-saml-example - 動作確認

Rails を立ち上げます。

bundle exec rails server -b 0.0.0.0

http://localhost:3000/ を表示し「Login」リンクをクリックすると、OneLogin を IdP とした SAML2.0認証(シングルサインオン)を試せます。

まとめ

OneLogin が Gem を提供してくれているおかげで簡単に SAML2.0 のSP(クライアント)を実装することができます。

SAML2.0 のSPを実装している Gem なので OneLogin 以外の SAML2.0に対応しているアイデンティティー管理サービスと連携することができます。

サンプルもすごくシンプルで以下の2ファイルをみると ruby-saml の使い方がわかります。

  • app/controllers/saml_controller.rb
  • app/models/account.rb

いろいろなシングルサインオンを実現するプロトコルがあると思いますが、SAML2.0 も候補の1つになると思います。

56
58
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
56
58