sgomez / ssp-guard-bundle
SimpleSAMLphp 对 Symfony 的集成
0.11.0
2019-04-25 20:58 UTC
Requires
- php: >=5.5.9
- symfony/config: ~2.8|~3.0|^4.0
- symfony/framework-bundle: ~2.8|~3.0|^4.0
- symfony/routing: ~2.8|~3.0|^4.0
- symfony/security-guard: ~2.8|~3.0|^4.0
- twig/twig: ~1.14,>=1.14.2|~2.0
README
此包可以帮助您使用 SimpleSAMLphp 安装与 Symfony 集成。此包使用 Guard 组件进行用户认证。
此包基于以下两个包
安装
步骤 1:下载包
通过运行以下命令使用 Composer 安装库
composer require sgomez/ssp-guard-bundle
步骤 2:启用包
接下来,在您的 app/AppKernel.php
文件中启用该包
<?php // app/AppKernel.php public function registerBundles() { $bundles = array( // ... new Sgomez\Bundle\SSPGuardBundle\SSPGuardBundle(), // ... ); }
步骤 3:加载包的路由
通过在 app/config/routing.yml
文件的开始处添加此配置来加载包的路由
# app/config/routing.yml ssp_bundle: resource: "@SSPGuardBundle/Resources/config/routing/connect.xml" # ...
步骤 4:配置包
您需要在 app/config/config.yml
文件中配置 SimpleSAMLphp 安装的路径以及您想要使用的 authsources。以下是在 app/config/config.yml
文件中需要的示例配置
ssp_guard: installation_path: /var/simplesamlphp auth_sources: admin: title: Admin user_id: user symfony: title: My IDP user_id: uid
在这个例子中,admin
和 symfony
是在 SSP 的 authsources.php
中定义的名称。
步骤 5:创建 Guard 认证类
为了认证,您需要为每个使用的 authsource 创建一个 Guard 认证器。
存在一个 SSPGuardAuthenticator
基类,可以简化这个过程
<?php // src/AppBundle/Security/AdminAuthenticator.php namespace AppBundle\Security; use Sgomez\Bundle\SSPGuardBundle\Security\Authenticator\SSPGuardAuthenticator; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Exception\AuthenticationException; use Symfony\Component\Security\Core\User\UserProviderInterface; class AdminAuthenticator extends SSPGuardAuthenticator { public function start(Request $request, AuthenticationException $authException = null) { // Change it to your login path return new RedirectResponse($this->router->generate('login')); } public function getUser($credentials, UserProviderInterface $userProvider) { return $userProvider->loadUserByUsername($credentials[$this->authsource->getUserId()][0]); } public function onAuthenticationFailure(Request $request, AuthenticationException $exception) { $this->saveAuthenticationErrorToSession($request, $exception); return new RedirectResponse($this->router->generate('login')); } public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey) { $targetPath = $this->getTargetPath($request, $providerKey); if (!$targetPath) { // Change it to your default target $targetPath = $this->router->generate('homepage'); } return new RedirectResponse($targetPath); } }
并创建服务定义,例如。
<service id="app.admin.authenticator" class="AppBundle\Security\AdminAuthenticator"> <argument type="service" id="router"/> <argument type="service" id="ssp.guard.registry"/> <argument>admin</argument> <!-- this is the authsource id --> </service>
或者在 app/config/services.yml
中
AppBundle\Security\AdminAuthenticator: arguments: ["@router", "@ssp.guard.registry", "admin"]
步骤 6:创建自定义用户提供者
如果您使用 FOSUserBundle,则可以使用它或创建自己的 自定义用户提供者。
您的用户提供者将被传递到 SSPGuardAuthenticator::getUser
方法,并用于搜索用户。
步骤 7:配置安全设置
您需要配置 app/config/security.yml
以使用 Guard 认证器
# app/config/security.yml providers: fos_userbundle: id: fos_user.user_provider.username firewalls: main: guard: provider: fos_userbundle authenticators: - app.admin.authenticator - ... # you can add as many authsources as you want access_control: - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/connect$, role: IS_AUTHENTICATED_ANONYMOUSLY }
步骤 8:路由
要初始化登录过程,您需要将链接放置到 ssp_guard_connect
。有两个 Twig 函数可以帮助您完成此操作: ssp_auth_sources
和 spp_auth_source
。以下是一个登录模板的示例
{% for source in ssp_auth_sources() %} {% set item = ssp_auth_source(source) %} <a href="{{ path('ssp_guard_connect', {'authSource': source}) }}"> {{ item.title }} </a> {% endfor %}