一个用于与SAML SSO进行接口交互的库。它通过封装 onelogin/php-saml 包来实现这一点。

2.3.1 2022-05-18 14:57 UTC

README

一个用于与SAML SSO集成的包。

示例用法

所有示例都需要首先创建一个包含所有设置的SAML "客户端"。必须按照以下方式创建它

$spConfig = new Programster\Saml\ServiceProviderConfig(
    entityId: APP_SERVICE_PROVIDER_IDENTITY,
    name: APP_SERVICE_PROVIDER_NAME,
    description: "A test service provider",
    loginHandlerUrl: APP_URL . "/auth/saml-login-handler",
    logoutHandlerUrl: APP_URL . "/auth/saml-logout-handler",
    publicCert: file_get_contents(SERVICE_PROVIDER_CERT_PATH),
    privateKey: file_get_contents(SERVICE_PROVIDER_PRIVATE_KEY_PATH)
);

$idpConfig = new \Programster\Saml\IdentityProviderConfig(
    entityId: IDENTITY_PROVIDER_IDENTITY_URI,
    authUrl: IDENTITY_PROVIDER_AUTH_URL,
    logoutUrl: IDENTITY_PROVIDER_LOGOUT_URL,
    publicSigningCertificates: [file_get_contents(IDENTITY_PROVIDER_PUBLIC_SIGNING_CERT)],
);

$samlConfig = new \Programster\Saml\SamlConfig($spConfig, $idpConfig);
$samlClient = new \Programster\Saml\SamlClient($samlConfig);

我知道这听起来有点冗长,但客户端需要配置很多设置,我更喜欢这种方式,而不是期望开发者只需传递一个键值对数组,并期望他们知道需要设置哪些键等。

一旦有了SAML客户端,就可以用它来处理所有请求/响应,如下所示

将用户发送到SSO的签名SAML请求中登录,然后通过用户的信息将用户重定向回我们的网站

$returnToURL = "https:///saml-login-handler";
$samlClient->handleUserLoginRequest($returnToURL);

然后使用客户端处理SSO登录并重定向回我们的网站的用户详细信息响应

$response = $samlClient->handleSamlLoginResponse();
$userAttributes = $response->getUserAttributes();
$userEmail = $userAttributes['email'][0];

使用客户端向SSO发送注销请求

$returnToUrl = 'http://my.domain.com/auth/saml-logout-handler';
$samlClient->handleUserLogoutRequest($returnToUrl);

处理该注销请求的SSO响应

$ssoLoggedOutUrl = $samlClient->handleSamlLogoutResponse();