LoginSignup
9
10

More than 5 years have passed since last update.

PingFederateを使ってSAML認証対応してみた

Last updated at Posted at 2018-07-25

PingFederateと連携して社内向けのコンテンツにSSOログイン機能をつけたい。

そもそもSAMLとは何なのか。

SAMLは、Security Assertion Markup Languageの略で、認証、属性、権限の認可をXMLのフォーマットにて定義し、これらの情報を送信する規約のことです。
今回やりたいことのシングルサインオンや、ID連携等によく使用されます。

わかりやすい説明がここに書いてありました。
https://www.slideshare.net/shinichitomita/saml-34672223

 シングルサインオンで利用する場合

シングルサインオンは、ユーザーが一度認証を受けることで、連携された他の様々なウェブサービスをその認証を使用して、利用出来る様になります。

Slack,Box,Tableau,Cybozu等の有名サービスでもこれを利用することが可能なようです。

Slack: https://get.slack.help/hc/en-us/articles/203772216-SAML-single-sign-on
Box: https://www.dropbox.com/ja/guide/admin/security/configure-single-sign-on
Tableau: https://onlinehelp.tableau.com/current/online/ja-jp/saml_config_pingone.htm
Cybozu: https://jp.cybozu.help/general/ja/admin/list_externalservices/list_saml/saml_settings.html

いざ実装するとなると出てくる登場人物

  • SP(サービスプロバイダー)
  • Idp(IDプロバイダー)
  • ACS(アサーションコンシューマサービス)
  • ユーザー

図にするとこんな感じ
スクリーンショット 2018-07-25 14.09.22.png

Idp、SPに対して相互に必要となる設定が見えてくると思います。
ACSが行う主な処理は、下記となります。
- Idpからデータを受け取る(XML)
- XMLをparse
- 署名の検証
- Assertionの有効性の確認
- 属性の取り出し

自作はセキュリティホールに繋がるのでおすすめしないとの事。
https://jvn.jp/vu/JVNVU98536678/
https://www.kb.cert.org/vuls/id/475445

Saml認証のためのライブラリ

 今回使ったもの

laravel-saml2は、saml認証を行うためのlaravelパッケージです。
設定箇所がまとまっててわかりやすかったので採用しました。
セットアップに関しては、READMEや、下記の記事を参考にしました。
日本語で書いてあります。
Laravel5でSAMLシングルサインオンする

設定

saml2_settings.phpの設定では以下の項目を設定します。

  • sp
    • NameIdFormat: urn:oasis:names:tc:SAML:2.0:nameid-format:persistent <- 固定
    • x509cert: 証明書文字列 idp側から出力してもらうmetadata参照
    • entityId: 任意の文字列 <-適当でおkだけど後でidp側に登録する
    • assertionConsumerService: localhost:8000/saml2/acs <- 認証後のリダイレクト先のURL(laravel-saml2の場合はこのパスで作ってくれる)。これも後でidpに登録
  • idp
    • entityId: idp側から出力してもらうmetadata参照
    • singleSignOnService: idp側から出力してもらうmetadata参照

 テスト

テストして終わりです。

 まとめ

Idpは、ActiveDirectoryと連携して動いてたりするので、社畜プログラマーが気軽に触れない感あります。そのあたりは情シスが握ってたりするのですが、担当者がわかってなかったりするケースもあるので、開発者側も、仕組み等を把握しておくとスムーズに色々やれる気がします。

参考

wiki: https://ja.wikipedia.org/wiki/Security_Assertion_Markup_Language
Ping KnowledgeBase: https://ping.force.com/Support/PingIdentityKnowledgeHome

9
10
3

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
9
10