log->debug("OIDC logout: JWT header: " . $token->getHeaderRaw()); $this->log->debug("OIDC logout: JWT payload: " . $token->getPayloadRaw()); $this->validator->validate($token); $this->tokenValidator->validateSignature($token); $this->tokenValidator->validateFields($token); $usernameClaim = $this->configDataProvider->getUsernameClaim(); if (!$usernameClaim) { throw new Invalid("No username claim in config."); } $username = $token->getPayload()->get($usernameClaim); if (!$username) { throw new Invalid("No username claim `{$usernameClaim}` in token."); } $user = $this->userRepository->findByUsername($username); if (!$user) { return; } $authTokenList = $this->entityManager ->getRDBRepositoryByClass(AuthTokenEntity::class) ->where([ 'userId' => $user->getId(), 'isActive' => true, ]) ->find(); foreach ($authTokenList as $authToken) { assert($authToken instanceof AuthToken); $this->authTokenManger->inactivate($authToken); } } }