yraiso / casauth-bundle
适用于 Symfony 5.4、6.0 和 7.0 的基本 CAS (SSO) 验证器
Requires
- php: >=7.2.5
- symfony/config: ^5.4|^6.0|^7.0
- symfony/dependency-injection: ^5.4|^6.0|^7.0
- symfony/http-client: ^5.4|^6.0|^7.0
- symfony/http-foundation: ^5.4|^6.0|^7.0
- symfony/http-kernel: ^5.4|^6.0|^7.0
- symfony/security-bundle: ^5.4|^6.0|^7.0
README
适用于 Symfony 5.4、6.0 和 7.0 的基本 CAS (SSO) 验证器(不使用 guard 组件且不使用旧验证)
此包为 Symfony 5.4、6.0 和 7.0 提供了一个非常基本的 CAS (https://github.com/apereo/cas/tree/4.1.x) 验证客户端,并带有新的安全验证系统
安装
通过运行以下命令使用 Composer 安装库:
composer require yraiso/casauth-bundle
接下来,在您的 config/bundles.php
文件中启用此捆绑包
<?php return [ //..... YRaiso\CasAuthBundle\YRaisoCasAuthBundle::class => ['all' => true], ];
创建此文件 config/packages/y_raiso_cas_auth.yaml,并添加以下设置
y_raiso_cas_auth: server_login_url: https://mycasserver/cas/ server_validation_url: https://mycasserver/cas/serviceValidate server_logout_url: https://mycasserver/cas/logout server_force_redirect_https: false # only for app with vhost set to 80 and behind reverse proxy (443) - if in env file must be cast to boolean value like('%env(bool:CAS_FORCE_REDIRECT_HTTPS)%')! xml_namespace: cas options: [] # you can add request options (or override global ones) (cf https://symfony.com.cn/doc/current/http_client.html#making-requests)
注意:xml_namespace 和 options 参数是可选的
使用以下值修改您的 security.yml(以下设置中的提供者不应使用,因为这只是一个非常基础的示例)
security: enable_authenticator_manager: true providers: cas_user_provider: id: yraiso.cas_user_provider firewalls: dev: pattern: ^/(_(profiler|wdt)|css|images|js)/ security: false main: logout: ~ remote_user: provider: cas_user_provider custom_authenticator: yraiso.cas_authenticator entry_point: yraiso.cas_auth_entry_point access_control: - { path: ^/, roles: ROLE_USER }
在生产环境中,创建您自己的 UserProvider (实现 UserProviderInterface 和 PasswordUpgraderInterface) 以及 User (实现 UserInterface,此类不是必需的),然后在 providers:cas_user_provider:id: (security.yml 文件) 中添加其服务名称
services.yaml
# ... services: cas_user_provider: class: App\Security\User\CasUserProvider
就这样!您受保护的路由应该会重定向到您的 CAS 登录页面,该页面应该会验证您。
注意:如果您创建了自己的用户,必须声明以下属性及其访问器
// .... private $uid; private $roles = []; private $casAttributes;
CAS 全局注销选项
如果您希望用户在从您的应用注销时从远程 CAS 服务器注销,则应应用以下设置
security.yaml
# ... firewalls: # ... main: # ... logout: path: app_logout
services.yaml
# ... services: # ... YRaiso\CasAuthBundle\EventListener\LogoutListener: arguments: $logoutUrl: "%cas_server_logout_url%" tags: - name: 'kernel.event_listener' event: 'Symfony\Component\Security\Http\Event\LogoutEvent' dispatcher: security.event_dispatcher.main
接下来,您需要为该 URL 创建一个路由(但不创建控制器)
/** * @Route("/logout", name="app_logout", methods={"GET"}) * */ public function logout(): void { // controller can be blank: it will never be called! throw new \Exception('Don\'t forget to activate logout in security.yaml'); }