2013-01-03 146 views
3

我有2点:验证跨站点

  • SITE A - 一个asp.net网站
  • 站点B - 一个PHP的网站

我们在ASP中的所有用户信息。网站(这实际上是一个Kentico网站)。 现在,业务需求是用户应该能够使用Site B中的相同凭据登录。理想情况下,我们需要登录Site A并导航到Site B的用户,身份验证将自动进行。

是否有办法实现这种认证形式?还是不可能?

+1

您需要认真考虑安全性,但是不能使用cookie吗? – Mattt

回答

3

这不是一个认证问题,而是一个授权问题。一旦您以任何您想要的方式对用户进行了身份验证,无论您需要哪种技术,您都可能会向他们授予某种令牌,然后您可以使用该令牌将授权授予网站中的不同资源。

在您的情况下,您有两种不同的技术,这只意味着您将无法使用开箱即用的asp.net或php会话管理,但您只需要有一个共同的地方检查会话令牌是否有效,它们属于合法用户,并且该用户有权访问此资源。

如果上述内容很琐碎,对不起,也许您的问题更多地针对位于两个不同域的网站,因此无法使用域cookie来存储会话信息。是这样吗?

+0

感谢您的详细回复。是的,会话令牌是有道理的。我认为仍然可以继续使用开箱即用的asp.net状态,也许我可以在url中共享会话状态?或者可能是一个cookie(如果它在子域中可能更容易) –

+0

如果您想在网站A中进行身份验证,然后网站B既不是同一个域也不是子网域,则无法自动将它们关联起来,也就是尽快当B站点被访问时,知道它需要从属于站点A的域的浏览器中获取并使用它。但是,是的,一个子域可以解决问题,您可以在子域之间共享Cookie。 – palako

+0

感谢您提供有关此 –

3

对此的规范解决方案是使用像OpenID这样的协议。 OpenID允许网站要求用户使用其他网站进行身份验证,然后兑现这些凭据;使用称为“属性交换”的协议,认证提供者可以提供关于用户的附加数据。

OpenID是StackExchange如何设法使用您的Google帐户(或您正在使用的任何设备)登录您,以及SO网络中的网站如何在您无需登录的情况下识别您的身份。

OpenID的好处在于它是一个广泛使用的协议,所以它可能非常安全并且经过良好测试;您不会冒险编制自己的解决方案,并意外地将您的用户暴露给安全风险。它有很好的记录,并得到广泛的支持。

有一个OpenID framework for .Net它允许你创建你自己的OpenID提供者;它似乎Kentico supports OpenID as an authentication mechanism。 PHP有几个OpenID库(Google是你的朋友)。

您究竟如何实现这一点取决于您的Kentico身份验证如何工作,但原则上,将Kentico用户数据库粘贴到您编写的OpenID提供程序应该相当容易;让Kentico使用它来进行身份验证似乎是一个配置设置。您必须重新编写PHP网站才能使用OpenID;再次,不清楚目前的工作方式,但我无法想象它会比您尝试的其他解决方案更难。

+0

+1的更多信息,建议使用开放式ID,但我认为我们会使用其他用户提供的选项。非常感谢您的宝贵意见 –

2

我在.net平台上有类似的问题,我没有选择将它们放在一个子域中。在这种情况下,您可以传递用户名和令牌(表示用户已被站点B认证),也许可以使用加密后的密码对外部数据库进行重新验证,然后将其重定向到站点。在我的情况下,我需要这样做,因为我正在重定向到站点管理员的相应站点CMS。

+0

感谢您的评论。一个非常好的选择。 –