feat(sp.slo): 实现了退出单点登录的服务

This commit is contained in:
李东云
2022-04-27 17:14:18 +08:00
parent a8d9c76489
commit 021c4bc83e

View File

@@ -9,7 +9,60 @@
namespace Singularity\HyperfSaml\Services\Sp;
use Hyperf\HttpServer\Contract\RequestInterface;
use Hyperf\HttpServer\Contract\ResponseInterface;
use Psr\Http\Message\ResponseInterface as PsrResponseInterface;
use Singularity\HyperfSaml\Services\Base;
use Teapot\StatusCode\RFC\RFC7231;
/**
* 单点退出登录
* Singularity\HyperfSaml\Services\Sp\Slo@HyperfSaml
*
* @author 李东云<dongyun.li@luxcreo.cn>
* Powered by PhpStorm
* Created on 2022/4/27
*/
class Slo
{
public function __construct(
private Base $base,
private RequestInterface $request,
private ResponseInterface $response,
) {
}
/**
* 重定向方式退出单点登录
*
* @param string $uid
* @param string $originToken
*
* @return \Psr\Http\Message\ResponseInterface
*/
public function redirect(string $uid, string $originToken): PsrResponseInterface
{
$idpId = config('saml.server.idp_logout_url');
$issuer = config('saml.client.entity_id');
$relayState = $this->request->query('relayState');
$url = $this->base->createLogoutRequest(
uid: $uid,
token: $originToken,
idpID: $idpId,
issuer: $issuer,
relayState: $relayState
);
return $this->response->redirect($url, RFC7231::FOUND);
}
/**
* 回调方式退出单点登录IDP 通知 SP)
* @return void
*/
public function callback()
{
}
}