yraiso/casauth-bundle

适用于 Symfony 5.4、6.0 和 7.0 的基本 CAS (SSO) 验证器

安装次数: 3,829

依赖关系: 0

建议者: 0

安全: 0

星标: 2

关注者: 1

分支: 0

公开问题: 0

类型:symfony-bundle

v1.0.7 2024-02-13 16:23 UTC

This package is auto-updated.

Last update: 2024-09-13 17:55:51 UTC


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');
    }