在symfony2和BeSimpleSsoAuthBundle中使用CAS进行用户身份验证(或其他建议)


User authentication with CAS in symfony2 and BeSimpleSsoAuthBundle (or other suggestions)

我正在做一个涉及CAS服务器symfony2的web项目:http://www.jasig.org/cas不幸的是,我不能使它工作。我已经尝试了几种配置,我所做的一切都是正确的。这是我期望为任何想要被记录的用户做的通量:

  1. 用户想登录我的系统
  2. 我的系统以某种方式将用户重定向到cas服务器登录网页,以使用用户凭证登录。
  3. 有效登录后,cas服务器登录页面将用户重定向回我的系统。
  4. 我的系统知道用户是否基于协议机制记录良好。

我已经找到了一个Bundle BeSimpleSsoAuthBundle (https://github.com/BeSimple/BeSimpleSsoAuthBundle)为symfony2,但我不确定它是否正常工作,因为它看起来有点老。按照代表的指示,以下是我的配置:

对于config.yml

be_simple_sso_auth:
    admin_sso:
        protocol:
            id: cas
            version: 2
        server:
            id: cas
            login_url: https://cas_server.fi/cas/login
            validation_url: https://cas_server.fi/cas/serviceValidate

For security.yml

security:
    encoders:
        Symfony'Component'Security'Core'User'User: plaintext
    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
    providers:
        in_memory:
            memory:
                users:
                    user:  { password: userpass, roles: [ 'ROLE_USER' ] }
                    admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] }
    firewalls:
        dev:
            pattern:  ^/(_(profiler|wdt)|css|images|js)/
            security: false
        my_firewall:
            pattern: ^/
            anonymous: ~
            trusted_sso:
                manager: admin_sso
                login_action: false
                create_users: true
                created_users_roles: [ROLE_ADMIN]
                check_path: /

cas服务器提供给我两个。crt文件,我已经在我的Ubuntu 13.10中安装了。或者至少我是这么想的……但是,前面的任何配置似乎都不需要这些证书,因为我无法指定bundle可以在哪里找到它们。无论如何,它还没有工作,所以这一步可能是无关紧要的。

那么,现在发生的是下一个:

  1. 用户第一次访问/
  2. 我的系统将他重定向到/login(据我所知这是默认方向…)

管理这个/login我在路由。在我自己的包中:

ss_web_login:
    path: /login
    defaults: { _controller: BeSimpleSsoAuthBundle:TrustedSso:login }

我已经检查了这个控制器,它看起来像它绘制了一个锚到"某处"(我猜是我的cas服务器的登录表单。

让我们继续…正如我所说,用户被重定向到/login,但我得到一个错误:

Controller "BeSimple'SsoAuthBundle'Controller'TrustedSsoController::loginAction()" requires that you provide a value for the "$manager" argument (because there is no default value or because there is a non optional argument after this one).

这是因为BeSimpleSsoAuthBundle:TrustedSso:login期望不同的参数:

public function loginAction(Manager $manager, Request $request, AuthenticationException $exception = null)

但是没有人传递它期望的这些参数。我该怎么办?

请,如果你有任何其他的建议,使这个工作,我将非常感激。甚至建议我使用另一个cas客户端或不同的实现(但我需要使它工作)。

就这个错误而言-控制器" bessimple 'SsoAuthBundle'Controller'TrustedSsoController::loginAction()"要求您为"$manager"参数提供一个值(因为没有默认值或因为在此参数之后有一个非可选参数)。

对于

而言,解决/修复此问题的实际答案是在您的安全性中提供正确的用户提供者。在防火墙的提供程序密钥中使用它。

例如

。提供者:管理员:entity: {class: UserBundle' entity 'User}

在需要的防火墙下,使用provider: administrators作为key:value。

这个问题解决了。

还要注意,匿名键需要注释。匿名用户密钥没有填充$manager