SAMLとは、 Security Assertion Markup Language の略で、認証サーバー(IdP)とサービス提供サーバー(SP)間で認証を行ったユーザー情報を交換するための仕組みです。
パスワードなどの秘匿情報はユーザーとIdPの間でやり取りを行い、IdPからSPには「認証済みである」ことを通知することで、ユーザーがSPのサービスを利用できるようにします。
PukiWiki では $auth_type に AUTH_TYPE_SAML を指定することで SAML認証を利用できます。
SAML IdP (認証サーバー)と連携して、Single Sign Onシステムを実現します。
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 で動いた設定
SAML IdP (ID Provider) の設定 (PukiWikiサイトをSPとして登録) をします。
Okta Developer ( https://developer.okta.com/ ) 等で、テスト用のIdPを構築できます。
設定値の詳細は 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-----', ), );