Guten Tag Liebe Contao Community,
ich versuche über eine SAML Schnittstelle einen User einzuloggen.
Der Datensatz wird über das MemberModel angelegt und auch
PHP-Code:
$this->authorizationChecker->isGranted('IS_AUTHENTICATED_REMEMBERED')
wirft true zurück.
Das ist mein Controller
PHP-Code:
$this->authenticateUser($attributesData['DatenuebermittlerPseudonymId']);
if ($this->authorizationChecker->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
$session->set('mukuser', $attributesData['DatenuebermittlerPseudonymId']);
$session->set('muklogin', true);
Controller::redirect('/dashboard.html');
}
Controller::redirect('/dashboard.html?error=true');
Und das die authenticateUser Funktion.
PHP-Code:
private function authenticateUser(string $username): void
{
$member = MemberModel::findOneBy('username', $username);
if (null === $member) {
throw new \Exception('Benutzer nicht gefunden.');
}
$customUser = new CustomUser($member);
$token = new UsernamePasswordToken($customUser, 'contao_frontend', $customUser->getRoles());
$this->tokenStorage->setToken($token);
$request = Request::createFromGlobals();
$event = new InteractiveLoginEvent($request, $token);
$this->eventDispatcher->dispatch($event, InteractiveLoginEvent::class);
$member->lastLogin = time();
$member->save();
}
Die Klasse CustomUser
PHP-Code:
class CustomUser implements UserInterface
{
private $member;
public function __construct(MemberModel $member)
{
$this->member = $member;
}
public function getRoles(): array
{
return ['ROLE_MEMBER'];
}
public function getPassword(): string
{
return $this->member->password;
}
public function getSalt()
{
return null;
}
public function getUsername(): string
{
return $this->member->username;
}
public function eraseCredentials()
{
}
public function getUserIdentifier(): string
{
return $this->getUsername();
}
}
Doch wieso wird der Nutzer dann im dashboard.html nicht als eingeloggt erkannt, dort ist die Abfrage
PHP-Code:
$this->authorizationChecker->isGranted('IS_AUTHENTICATED_REMEMBERED')
= NULL
Kann es sein, dass ich irgendetwas übersehe?
Zur Info noch meine services.yaml
PHP-Code:
# config/services.yaml
services:
_defaults:
autowire: true
autoconfigure: true
public: false
# Konfiguration für den SamlController
App\Controller\SamlController:
public: true
tags:
- { name: 'controller.service_arguments' }
arguments:
$framework: '@contao.framework'
$tokenStorage: '@security.token_storage'
$authorizationChecker: '@security.authorization_checker'
$eventDispatcher: '@event_dispatcher'
Und meine security.yaml
PHP-Code:
security:
firewalls:
contao_frontend:
pattern: ^/saml
anonymous: true
Lesezeichen