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)
+						       );
+		}
 	}
 
 }