我对Symfony2比较陌生。我已经使用Symfony2的内置安全机制通过从数据库验证用户来构建系统。让我们称这个系统为“B”
在asp.net上有一个应用程序在不同的服务器上使用相同的凭据(我已经从该系统复制了users表)。让我们称这个系统为“A”。用户是否可以单击ASP应用程序中的链接,将其重定向到Symfony2应用程序并自动验证它们,而无需重新输入登录凭据?
我对编程系统“A”的控制有限。是否可以使用单个/静态/预定义加密用户凭证,可以从系统A使用以在系统B上对用户进行身份验证(当然,将用户类型作为数据参数提供,以便我可以将系统B中的用户限制为他/她的授权任务)。经过身份验证后,用户应该能够直接与symfony2应用程序进行交互,就像他们使用系统B的登录页面登录一样。
更明确地说,这是事件的流程:
请注意,我无法在Symfony服务器上维护用户数据库。我只会提供有关可用的不同用户类型的信息。
我查看了Symfony2方法的自定义身份验证提供程序,但不确定它是否会解决将客户端/用户完全重定向到Symfony2应用程序的目的。它看起来更像是一种Web服务身份验证方法,但我可能错了。
SAML是实现这一目标的更好选择吗?
答案 0 :(得分:0)
首先,这是一个已解决的问题。 OAuth之类的东西存在是有原因的。在尝试制作自己的解决方案(并处理安全性后果)之前,我建议您先查看一下。
但要回答你的问题:
在我看来,如果不能在系统“A”中更改某些内容,就没有安全的方法可以做到这一点。不知何故,Symfony应用程序需要能够从系统“A”获得一些高度无法猜测的哈希令牌,以便它可以通过它进行身份验证。其他任何东西都是不安全的。
理想情况下,您可以将用户发送到系统“A”上的Symfony应用程序的表单从用户的用户名和会话等创建哈希,并在将用户重定向到Symfony应用程序时将其与用户一起发送(即在URL参数中:类似于http://symfony-app.com/login?token=[the really long, un-guessable hash]
)。系统“B”会将该哈希值存储在数据库中一段有限的时间,而您的Symfony应用程序将根据该哈希值进行身份验证。