■Workspace ONE Accessに OneLogin の ruby-saml-exampleを連携した
デモ用に適当なSPが欲しいと常々思っていたので、「なんか手軽にできないかなー」と思っていたら、ピッタリなブログ記事を見つけたのでやってみました。
前提条件は、Ruby on Rails 4の環境があることです。大まかな手順は、上記ブログ様でも記載されているように、以下となります。
- ruby-saml-example をクローン
- Workspace ONE Access にSP側の情報を入れる
- ruby-saml-example の設定をする
1.ruby-saml-exampleをクローン
git cloneで、OneLogin が提供する以下のruby-saml-example を手元の環境にクローンします。
2. Workspace ONE Access にSP側の情報を入れる
以下画像を参考に、Workspace ONE Access にこれから作成するSPの情報を入れます。
Workspace ONE Access 上は、本当に画像の箇所くらいしか設定する箇所はありません。
※ホスト名部分は実際の作成する予定のSPのホスト名に読み替えて実装します。
audienceを設定。途切れていますが、1枚目の画像にて Application IDとして指定したSAML metadataのURLを入れています |
3.ruby-saml-example の設定をする
ruby-saml-exampleの設定をします。主に自分が編集したのは二つのファイルでした。
- .ruby-version
OneLogin のruby-saml-exampleでは、rubyのバージョンとして最初2.0.2が指定されています。ですが、2020年10月現在はruby 2.0.2が手に入らないため、インストール済みの2.2.3を指定しました。
※この後bundle installしました
htyz@htyz:~/ruby-saml-example$ cat -n /home/htyz/ruby-saml-example/.ruby-version
1 ruby-2.2.3
htyz@htyz:~/ruby-saml-example$
- app/models/account.rb
OneLogin をIDPとして使用するのであれば、すでにこのファイル内に定義された情報をちょこちょこいじるだけなのですが、Workspace ONE Accessの場合は以下のようにしました。
※オレンジの箇所が変更部分です(Workspace ONE Access の IDP metadata から引っ張ってきました)
htyz@htyz:~/ruby-saml-example$ cat -n app/models/account.rb
1 class Account < ActiveRecord::Base
2 def self.get_saml_settings(url_base)
3 # this is just for testing purposes.
4 # should retrieve SAML-settings based on subdomain, IP-address, NameID or similar
5 settings = OneLogin::RubySaml::Settings.new
6
7 url_base ||= "http://localhost:3000"
8
9 # Example settings data, replace this values!
10
11 # When disabled, saml validation errors will raise an exception.
12 settings.soft = true
13
14 #SP section
15 settings.issuer = url_base + "/saml/metadata"
16 settings.assertion_consumer_service_url = url_base + "/saml/acs"
17 settings.assertion_consumer_logout_service_url = url_base + "/saml/logout"
18
19 onelogin_app_id = ""
20
21 # IdP section
22 # settings.idp_entity_id = "https://app.onelogin.com/saml/metadata/#{onelogin_app_id}"
23 # settings.idp_sso_target_url = "https://app.onelogin.com/trust/saml2/http-redirect/sso/#{onelogin_app_id}"
24 # settings.idp_slo_target_url = "https://app.onelogin.com/trust/saml2/http-redirect/slo/#{onelogin_app_id}"
25 # settings.idp_cert = ""
26
27 # IdP section
28 settings.idp_entity_id = "https://(Workspace ONE AccessのFQDN)/SAAS/API/1.0/GET/metadata/idp.xml"
29 settings.idp_sso_target_url = "https://
(Workspace ONE AccessのFQDN)
/SAAS/auth/federation"
30 settings.idp_slo_target_url = "https://
(Workspace ONE AccessのFQDN)
/SAAS/auth/logout"
31 settings.idp_cert = "-----BEGIN CERTIFICATE-----
32 MIIFQzCCAyugAwIBAgIHAk1LeUZL3zANBgkqhkiG9w0BAQsFADBZMSAwHgYDVQQD
~~~(証明書部分が長いため中略)~~~
60 kmF9ys3rLQ==
61 -----END CERTIFICATE-----"
62
63
64 # or settings.idp_cert_fingerprint = ""
65 # settings.idp_cert_fingerprint_algorithm = XMLSecurity::Document::SHA1
66
67 settings.name_identifier_format = "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"
68
69 # Security section
70 settings.security[:authn_requests_signed] = false
71 settings.security[:logout_requests_signed] = false
72 settings.security[:logout_responses_signed] = false
73 settings.security[:metadata_signed] = false
74 settings.security[:digest_method] = XMLSecurity::Document::SHA1
75 settings.security[:signature_method] = XMLSecurity::Document::RSA_SHA1
76
77 settings
78 end
79 end
80
htyz@htyz:~/ruby-saml-example$
余力があったらちゃんとマニュアル読んで何をどうしているのかを追っかけたいです。。