从外部系统身份验证到Symfony 2.0

时间:2012-07-11 21:12:44

标签: symfony saml-2.0

我对Symfony2比较陌生。我已经使用Symfony2的内置安全机制通过从数据库验证用户来构建系统。让我们称这个系统为“B”

在asp.net上有一个应用程序在不同的服务器上使用相同的凭据(我已经从该系统复制了users表)。让我们称这个系统为“A”。用户是否可以单击ASP应用程序中的链接,将其重定向到Symfony2应用程序并自动验证它们,而无需重新输入登录凭据?

我对编程系统“A”的控制有限。是否可以使用单个/静态/预定义加密用户凭证,可以从系统A使用以在系统B上对用户进行身份验证(当然,将用户类型作为数据参数提供,以便我可以将系统B中的用户限制为他/她的授权任务)。经过身份验证后,用户应该能够直接与symfony2应用程序进行交互,就像他们使用系统B的登录页面登录一样。

更明确地说,这是事件的流程:

  1. 用户登录ASP.NET系统。
  2. 用户点击链接以重定向到Symfony2应用程序
  3. 用户将自动进行身份验证,并根据其对Symfony2应用程序的角色获取访问权限
  4. 请注意,我无法在Symfony服务器上维护用户数据库。我只会提供有关可用的不同用户类型的信息。

    我查看了Symfony2方法的自定义身份验证提供程序,但不确定它是否会解决将客户端/用户完全重定向到Symfony2应用程序的目的。它看起来更像是一种Web服务身份验证方法,但我可能错了。

    SAML是实现这一目标的更好选择吗?

1 个答案:

答案 0 :(得分:0)

首先,这是一个已解决的问题。 OAuth之类的东西存在是有原因的。在尝试制作自己的解决方案(并处理安全性后果)之前,我建议您先查看一下。

但要回答你的问题:

在我看来,如果不能在系统“A”中更改某些内容,就没有安全的方法可以做到这一点。不知何故,Symfony应用程序需要能够从系统“A”获得一些高度无法猜测的哈希令牌,以便它可以通过它进行身份验证。其他任何东西都是不安全的。

理想情况下,您可以将用户发送到系统“A”上的Symfony应用程序的表单从用户的用户名和会话等创建哈希,并在将用户重定向到Symfony应用程序时将其与用户一起发送(即在URL参数中:类似于http://symfony-app.com/login?token=[the really long, un-guessable hash])。系统“B”会将该哈希值存储在数据库中一段有限的时间,而您的Symfony应用程序将根据该哈希值进行身份验证。