X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/f910738a80f918e1fdcf9f1ae4e63bce4287bd83..refs/pull/3918/head:/app/Auth/Access/Saml2Service.php diff --git a/app/Auth/Access/Saml2Service.php b/app/Auth/Access/Saml2Service.php index f5d0cd7cc..a95e3b1d2 100644 --- a/app/Auth/Access/Saml2Service.php +++ b/app/Auth/Access/Saml2Service.php @@ -20,14 +20,11 @@ use OneLogin\Saml2\ValidationError; */ class Saml2Service { - protected $config; - protected $registrationService; - protected $loginService; - protected $groupSyncService; + protected array $config; + protected RegistrationService $registrationService; + protected LoginService $loginService; + protected GroupSyncService $groupSyncService; - /** - * Saml2Service constructor. - */ public function __construct( RegistrationService $registrationService, LoginService $loginService, @@ -109,9 +106,10 @@ class Saml2Service $errors = $toolkit->getErrors(); if (!empty($errors)) { - throw new Error( - 'Invalid ACS Response: ' . implode(', ', $errors) - ); + $reason = $toolkit->getLastErrorReason(); + $message = 'Invalid ACS Response; Errors: ' . implode(', ', $errors); + $message .= $reason ? "; Reason: {$reason}" : ''; + throw new Error($message); } if (!$toolkit->isAuthenticated()) { @@ -168,7 +166,7 @@ class Saml2Service */ public function metadata(): string { - $toolKit = $this->getToolkit(); + $toolKit = $this->getToolkit(true); $settings = $toolKit->getSettings(); $metadata = $settings->getSPMetadata(); $errors = $settings->validateMetadata($metadata); @@ -189,7 +187,7 @@ class Saml2Service * @throws Error * @throws Exception */ - protected function getToolkit(): Auth + protected function getToolkit(bool $spOnly = false): Auth { $settings = $this->config['onelogin']; $overrides = $this->config['onelogin_overrides'] ?? []; @@ -199,14 +197,14 @@ class Saml2Service } $metaDataSettings = []; - if ($this->config['autoload_from_metadata']) { + if (!$spOnly && $this->config['autoload_from_metadata']) { $metaDataSettings = IdPMetadataParser::parseRemoteXML($settings['idp']['entityId']); } $spSettings = $this->loadOneloginServiceProviderDetails(); $settings = array_replace_recursive($settings, $spSettings, $metaDataSettings, $overrides); - return new Auth($settings); + return new Auth($settings, $spOnly); } /**