#author("2019-02-28T08:08:56+09:00","","") (リリース前の PukiWiki 1.5.2 に含まれる機能の説明です) #author("2019-03-01T08:02:11+09:00","default:webadmin","webadmin") * SAML認証 [#abd7594a] #contents SAMLとは、 Security Assertion Markup Language の略で、認証サーバー(IdP)とサービス提供サーバー(SP)間で認証を行ったユーザー情報を交換するための仕組みです。 パスワードなどの秘匿情報はユーザーとIdPの間でやり取りを行い、IdPからSPには「認証済みである」ことを通知することで、ユーザーがSPのサービスを利用できるようにします。 PukiWiki では $auth_type に AUTH_TYPE_SAML を指定することで SAML認証を利用できます。 SAML IdP (認証サーバー)と連携して、Single Sign Onシステムを実現します。 ** 導入手順 [#u056fd06] *** 1. Composer による onelogin/php-saml の導入 [#composer] 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を設定する [#idp] SAML IdP (ID Provider) の設定 (PukiWikiサイトをSPとして登録) をします。 Okta Developer ( https://developer.okta.com/ ) 等で、テスト用のIdPを構築できます。 *** 3. SAML設定ファイル saml_settings.php を作成する [#spsetting] 設定値の詳細は 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-----', ), ); * コメント [#p68a6b60] ---- #comment