/** * @param ProfileContext $context */ protected function doExecute(ProfileContext $context) { $message = MessageContextHelper::asSamlMessage($context->getOutboundContext()); $state = new RequestState(); $state->setId($message->getID()); $state->setNonce($message); $this->requestStore->set($state); }
/** * @param string $inResponseTo * @param AssertionContext $context * * @return \LightSaml\State\Request\RequestState */ protected function validateInResponseTo($inResponseTo, AssertionContext $context) { $requestState = $this->requestStore->get($inResponseTo); if (null == $requestState) { $message = sprintf("Unknown InResponseTo '%s'", $inResponseTo); $this->logger->emergency($message, LogHelper::getActionErrorContext($context, $this)); throw new LightSamlContextException($context, $message); } return $requestState; }
/** * @param ContextInterface|null $requestStateContext */ protected function flush($requestStateContext = null) { if ($requestStateContext instanceof RequestStateContext && $requestStateContext->getRequestState() && $requestStateContext->getRequestState()->getId()) { $existed = $this->requestStore->remove($requestStateContext->getRequestState()->getId()); if ($existed) { $this->logger->debug(sprintf('Removed request state "%s"', $requestStateContext->getRequestState()->getId()), LogHelper::getActionContext($requestStateContext, $this)); } else { $this->logger->debug(sprintf('Request state "%s" does not exist', $requestStateContext->getRequestState()->getId()), LogHelper::getActionContext($requestStateContext, $this)); } } }
/** * @param ProfileContext $context */ protected function doExecute(ProfileContext $context) { $message = MessageContextHelper::asSamlMessage($context->getOutboundContext()); $state = new RequestState(); $state->setId($message->getID()); $partyEntityId = $context->getPartyEntityContext() ? $context->getPartyEntityContext()->getEntityId() : ''; if ($context->getPartyEntityContext() && $context->getPartyEntityContext()->getEntityDescriptor()) { $partyEntityId = $context->getPartyEntityContext()->getEntityDescriptor()->getEntityID(); } $state->getParameters()->add([RequestStateParameters::ID => $message->getID(), RequestStateParameters::TYPE => get_class($message), RequestStateParameters::TIMESTAMP => $message->getIssueInstantTimestamp(), RequestStateParameters::PARTY => $partyEntityId, RequestStateParameters::RELAY_STATE => $message->getRelayState()]); if ($message instanceof LogoutRequest) { $state->getParameters()->add([RequestStateParameters::NAME_ID => $message->getNameID()->getValue(), RequestStateParameters::NAME_ID_FORMAT => $message->getNameID()->getFormat(), RequestStateParameters::SESSION_INDEX => $message->getSessionIndex()]); } $this->requestStore->set($state); }
/** * @param ProfileContext $context */ protected function doExecute(ProfileContext $context) { $response = MessageContextHelper::asStatusResponse($context->getInboundContext()); $inResponseTo = $response->getInResponseTo(); if ($inResponseTo) { $requestState = $this->requestStore->get($inResponseTo); if (null == $requestState) { $message = sprintf("Unknown InResponseTo '%s'", $inResponseTo); $this->logger->error($message, LogHelper::getActionErrorContext($context, $this, array('in_response_to' => $inResponseTo))); throw new LightSamlContextException($context, $message); } /** @var RequestStateContext $requestStateContext */ $requestStateContext = $context->getInboundContext()->getSubContext(ProfileContexts::REQUEST_STATE, RequestStateContext::class); $requestStateContext->setRequestState($requestState); } }
protected function doExecute(ProfileContext $context) { $logoutResponse = MessageContextHelper::asLogoutResponse($context->getInboundContext()); $id = $logoutResponse->getInResponseTo(); $requestState = $this->requestStore->get($id); $partyEntityId = $requestState->getParameters()->get(RequestStateParameters::PARTY); if ($partyEntityId && $logoutResponse->getIssuer() && $partyEntityId != $logoutResponse->getIssuer()->getValue()) { $message = sprintf('LogoutRequest sent to %s but LogoutResponse for that request was issued by %s', $partyEntityId, $logoutResponse->getIssuer()->getValue()); $this->logger->critical($message, LogHelper::getActionErrorContext($context, $this, ['sent_to' => $partyEntityId, 'received_from' => $logoutResponse->getIssuer()->getValue()])); throw new LightSamlContextException($context, $message); } $nameId = $requestState->getParameters()->get(RequestStateParameters::NAME_ID); $nameIdFormat = $requestState->getParameters()->get(RequestStateParameters::NAME_ID_FORMAT); $sessionIndex = $requestState->getParameters()->get(RequestStateParameters::SESSION_INDEX); $numberOfTerminatedSessions = $this->logoutResolver->terminateSession($logoutResponse->getIssuer()->getValue(), $nameId, $nameIdFormat, $sessionIndex); $this->logger->debug(sprintf('Processing LogoutResponse from %s for %s in format %s and session index %s resulted in termination of %s sso session from the store', $partyEntityId, $nameId, $nameIdFormat, $sessionIndex, $numberOfTerminatedSessions), LogHelper::getActionContext($context, $this)); }
/** * @param ProfileContext $context */ protected function doExecute(ProfileContext $context) { $response = MessageContextHelper::asStatusResponse($context->getInboundContext()); $inResponseTo = $response->getInResponseTo(); if ($inResponseTo) { $requestState = $this->requestStore->get($inResponseTo); if (null == $requestState) { $message = sprintf("Unknown InResponseTo '%s'", $inResponseTo); $this->logger->critical($message, LogHelper::getActionErrorContext($context, $this, array('in_response_to' => $inResponseTo))); throw new LightSamlContextException($context, $message); } $sentToParty = $requestState->getParameters()->get(RequestStateParameters::PARTY); if ($sentToParty && $response->getIssuer() && $response->getIssuer()->getValue() != $sentToParty) { $message = sprintf('AuthnRequest with id "%s" sent to party "%s" but StatusResponse for that request issued by party "%s"', $inResponseTo, $sentToParty, $response->getIssuer()->getValue()); $this->logger->critical($message, LogHelper::getActionErrorContext($context, $this, array('sent_to' => $sentToParty, 'received_from' => $response->getIssuer()->getValue()))); throw new LightSamlContextException($context, $message); } /** @var RequestStateContext $requestStateContext */ $requestStateContext = $context->getInboundContext()->getSubContext(ProfileContexts::REQUEST_STATE, RequestStateContext::class); $requestStateContext->setRequestState($requestState); } }