diff --git a/config-templates/authsources.php b/config-templates/authsources.php index 1ecc707eb6cf11d4d44389c98013efce78022515..1370ffc36d0a0e884f7140a0cdb6748e0ebe4fb4 100644 --- a/config-templates/authsources.php +++ b/config-templates/authsources.php @@ -2,6 +2,17 @@ $config = array( + /* + * This is a authentication source which handles admin authentication. + */ + 'admin' => array( + /* + * The default is to use core:AdminPassword, but it can be replaced with + * any authentication source. + */ + 'core:AdminPassword', + ), + 'example-sql' => array( 'sqlauth:SQL', 'dsn' => 'pgsql:host=sql.example.org;port=5432;dbname=simplesaml', diff --git a/lib/SimpleSAML/Utilities.php b/lib/SimpleSAML/Utilities.php index 19a66e9abe706b2c03a12772d871e25f8a0986c4..d289873139ec84a0e5da793b2e969eefecf4e0e2 100644 --- a/lib/SimpleSAML/Utilities.php +++ b/lib/SimpleSAML/Utilities.php @@ -1688,7 +1688,7 @@ class SimpleSAML_Utilities { $session = SimpleSAML_Session::getInstance(); - return $session->isValid('login-admin'); + return $session->isValid('admin') || $session->isValid('login-admin'); } @@ -1721,11 +1721,20 @@ class SimpleSAML_Utilities { return; } + $returnTo = SimpleSAML_Utilities::selfURL(); + /* Not authenticated as admin user. Start authentication. */ - $config = SimpleSAML_Configuration::getInstance(); - SimpleSAML_Utilities::redirect('/' . $config->getBaseURL() . 'auth/login-admin.php', - array('RelayState' => SimpleSAML_Utilities::selfURL()) - ); + + if (SimpleSAML_Auth_Source::getById('admin') !== NULL) { + SimpleSAML_Auth_Default::initLogin('admin', $returnTo); + } else { + /* For backwards-compatibility. */ + + $config = SimpleSAML_Configuration::getInstance(); + SimpleSAML_Utilities::redirect('/' . $config->getBaseURL() . 'auth/login-admin.php', + array('RelayState' => $returnTo) + ); + } } }