SimpleSAMLphpのデータソースにMySQLを指定する


概要

開発環境にSAML2.0方式によるシングルサインオンを構築するにあたり(IDプロバイダー用途で)SimpleSAMLphp を使う場合のユーザー認証データソースとして、MySQLなどのRDBMSを指定する方法を調べてみました。

※ちなみにデフォルトのデータソースは、config/authsources.php の'example-userpass'の部分で、PHP連想配列で「ユーザ名:パスワード」を定義するぽいです。

SimpleSAMLphpのバージョン
$ grep 'function getVersion' -i -A3 lib/SimpleSAML/Configuration.php
    public function getVersion()
    {
        return '1.17.1';
    }

対応手順

1. sqlauthモジュールを有効化する。

config/config.php
'module.enable' => [
    'sqlauth' => true,
],

2. データベース接続情報を設定する。

※自分の環境に合わせて、'dsn' や 'query' なども変更する。

config/authsources.php
    'example-sql' => [
        'sqlauth:SQL',
        'dsn' => 'mysql:host=sql.example.org;port=3306;charset=utf8;dbname=simplesaml',
        'username' => 'simplesaml',
        'password' => 'secretpassword',
        'query' => 'SELECT uid, givenName, email, eduPersonPrincipalName FROM users WHERE uid = :username AND password = SHA2(CONCAT((SELECT salt FROM users WHERE uid = :username), :password), 256);',
    ],

3. IdPが参照する認証データソースを変更する

metadata/saml20-idp-hosted.php
//    'auth' => 'example-userpass',
    'auth' => 'example-sql',

そのた

※ちなみに最初の手順1で 'sqlauth' => true を設定し忘れると、下記エラーが発生するぽい。

SimpleSAML\Error\Error: UNHANDLEDEXCEPTION

Backtrace:
1 www/_include.php:17 (SimpleSAML_exception_handler)
0 [builtin] (N/A)
Caused by: Exception: Could not resolve 'sqlauth:SQL': no class named 'SimpleSAML\Module\sqlauth\Auth\Source\SQL' or 'sspmod_sqlauth_Auth_Source_SQL'.
Backtrace:
6 lib/SimpleSAML/Module.php:404 (SimpleSAML\Module::resolveClass)
5 lib/SimpleSAML/Auth/Source.php:318 (SimpleSAML\Auth\Source::parseAuthSource)
4 lib/SimpleSAML/Auth/Source.php:363 (SimpleSAML\Auth\Source::getById)
3 lib/SimpleSAML/Auth/Simple.php:216 (SimpleSAML\Auth\Simple::logout)
2 modules/core/www/authenticate.php:17 (require)
1 lib/SimpleSAML/Module.php:236 (SimpleSAML\Module::process)
0 www/module.php:9 (N/A)

参考

SimpleSAMLphpのインストール自体は下記ページを参考にしました。