我正在使用涉及CAS服务器的symfony2进行一个web项目:http://www.jasig.org/cas遗憾的是我无法使其正常工作。我尝试了几种配置,我所做的任何事情都是正确的。这是我希望为任何想要记录的用户做的通量:
我找到了symfony2的Bundle BeSimpleSsoAuthBundle(https://github.com/BeSimple/BeSimpleSsoAuthBundle),但我不确定它是否正常工作,因为它看起来有点旧。按照代表的说明,以下是我的所有配置:
对于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
对于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服务器为我提供了两个我已经安装在Ubuntu 13.10中的.crt文件。或者至少我认为......但是之前的任何配置似乎都不需要这些证书,因为我无法指定捆绑包可以找到它们的位置。无论如何它还没有用,所以这一步可能无关紧要。
那么,现在发生的是下一个:
要管理这个 / login ,我在自己的bundle中有routing.yml:
ss_web_login:
path: /login
defaults: { _controller: BeSimpleSsoAuthBundle:TrustedSso:login }
我已经检查了这个控制器,它看起来像是在某个地方画了一个锚点#34; (我猜是我的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客户端或不同的实现(但我需要让它工作)。
非常感谢你。
答案 0 :(得分:0)
就此错误而言 - 控制器“BeSimple \ SsoAuthBundle \ Controller \ TrustedSsoController :: loginAction()”要求您为“$ manager”参数提供一个值(因为没有默认值或因为没有这之后的可选参数)。
担心,解决/解决此问题的实际答案是在security.yml提供程序密钥中提供正确的用户提供程序,并在防火墙的提供程序密钥中使用它。
例如。供应商: 管理员: entity:{class:UserBundle \ Entity \ User}
在所需的防火墙下,使用provider:administrators作为键:值。
此问题得到解决。
另请注意,需要对匿名密钥进行注释。匿名用户密钥不会填充$ manager