SAML認証

SAMLとは、 Security Assertion Markup Language の略で、認証サーバー(IdP)とサービス提供サーバー(SP)間で認証を行ったユーザー情報を交換するための仕組みです。

パスワードなどの秘匿情報はユーザーとIdPの間でやり取りを行い、IdPからSPには「認証済みである」ことを通知することで、ユーザーがSPのサービスを利用できるようにします。

PukiWiki では $auth_type に AUTH_TYPE_SAML を指定することで SAML認証を利用できます。

SAML IdP (認証サーバー)と連携して、Single Sign Onシステムを実現します。

導入手順

1. Composer による onelogin/php-saml の導入

https://getcomposer.org/download/ から最新の composer.phar を確認して、ダウンロードする。その後 onelogin/php-saml をインストールする

# wget  -O ~/composer.phar 'https://getcomposer.org/download/1.8.4/composer.phar'
# cd /var/www/html/pukiwiki # index.php がある、pukiwiki のルートディレクトリ
# php ~/composer.phar require onelogin/php-saml

(環境によっては composer.phar の実行時オプションが必要な場合もあります)

$ php -d open_basedir=~:$PWD:/ -d allow_url_fopen=1 ~/composer.phar require onelogin/php-saml # osdn.jp で動いた設定

2. SAML IdPを設定する

SAML IdP (ID Provider) の設定 (PukiWikiサイトをSPとして登録) をします。

Okta Developer ( https://developer.okta.com/ ) 等で、テスト用のIdPを構築できます。

3. SAML設定ファイル saml_settings.php を作成する

設定値の詳細は https://github.com/onelogin/php-saml#settings を参照してください。

/saml_settings:

<?php

   $spBaseUrl = 'https://pukiwiki.example.com/wiki';
   $settingsInfo = array (
       'sp' => array (
           'entityId' => $spBaseUrl.'/?//cmd.saml//metadata',
           'assertionConsumerService' => array (
               'url' => $spBaseUrl.'/?//cmd.saml//acs',
           ),
           'singleLogoutService' => array (
               'url' => $spBaseUrl.'/?//cmd.saml//sls',
               'binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect',
           ),
           'NameIDFormat' => 'urn:oasis:names:tc:SAML:2.0:nameid-format:emailAddress',
           'x509cert' => '-----BEGIN CERTIFICATE-----
MIIDIDCCAggCCQCpTIwIDI6hSDANBgkqhkiG9w0BAQsFADBSMQswCQYDVQQGEwJK
...
/n1Uap4WMcupRZ/nn6mW4rYzpuSTgn4W1irjT8m4f5dtzxD68q9MYewx2lP1G1zp
1e1eBsOZFRK49crMnc+i7vvCSRmzFb2PLYyA7SLGzipyVx2d
-----END CERTIFICATE-----',
           'privateKey' => '-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAv+K1mmUoK5+UrVQOiGTc4jcOzTbPFFzzhJ0nsDt2kK0QpBh4
...
K3wQlvT0GsWJc1cKO6LGy/mCUNr2uK4md3Es3UHVgOX2Sk8P3SE9pqCsIa9Upudq
DCgoysvudJRA7gzQjvjh0VDoDsu2/pNKuvSgMuF2DBvKeE8GuAoT
-----END RSA PRIVATE KEY-----',
       ),
       'idp' => array (
           'entityId' => 'http://saml-idp.example.com/********',
           'singleSignOnService' => array (
               'url' => 'https://idp.example.com/app/****************/sso/saml',
           ),
           'singleLogoutService' => array (
               'url' => '',
           ),
           'x509cert' => '-----BEGIN CERTIFICATE-----
MIIDpDCCAoygAwIBAgIGAVzp9gSBMA0GCSqGSIb3DQEBCwUAMIGSMQswCQYDVQQGEwJVUzETMBEG
...
GOGVaCgpdT3r+gc6SvKRLHjHecYmqh/64/wmhV4ycT9GpzpWo46QQ4WCjzgKpXYB9M9I3wAubFpP
1C5NzX/RCWNnSg/A1W41IA8zQRU423l2
-----END CERTIFICATE-----',
       ),
   );

コメント




トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-03-01 (金) 08:02:11
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 8.2.12. HTML convert time: 0.332 sec.

SourceForge