■Workspace ONE Accessに OneLogin の ruby-saml-exampleを連携した

デモ用に適当なSPが欲しいと常々思っていたので、「なんか手軽にできないかなー」と思っていたら、ピッタリなブログ記事を見つけたのでやってみました。

前提条件は、Ruby on Rails 4の環境があることです。大まかな手順は、上記ブログ様でも記載されているように、以下となります。

  1. ruby-saml-example をクローン
  2. Workspace ONE Access にSP側の情報を入れる
  3. 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$

余力があったらちゃんとマニュアル読んで何をどうしているのかを追っかけたいです。。

コメント