我正在做一个涉及CAS服务器symfony2的web项目:http://www.jasig.org/cas不幸的是,我不能使它工作。我已经尝试了几种配置,我所做的一切都是正确的。这是我期望为任何想要被记录的用户做的通量:
- 用户想登录我的系统
- 我的系统以某种方式将用户重定向到cas服务器登录网页,以使用用户凭证登录。
- 有效登录后,cas服务器登录页面将用户重定向回我的系统。
- 我的系统知道用户是否基于协议机制记录良好。
我已经找到了一个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可以在哪里找到它们。无论如何,它还没有工作,所以这一步可能是无关紧要的。
那么,现在发生的是下一个:
- 用户第一次访问/
- 我的系统将他重定向到/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