我有2个网站:
我们在asp.net站点(实际上是Kentico站点)中拥有所有用户信息。 现在,业务要求用户应该能够使用站点B中的相同凭据登录。理想情况下,我们需要登录站点A并导航到站点B的用户,身份验证将是自动的。
有没有办法实现这种形式的身份验证。或者是不可能的?
答案 0 :(得分:3)
这不是身份验证问题,而是授权问题。一旦您以任何您想要的方式对用户进行身份验证,您可能会授予他们某种令牌,然后您可以使用这些令牌授权您站点中的不同资源。
在您的情况下,您有两种不同的技术,这只意味着您将无法使用开箱即用的asp.net或php会话管理,但您需要做的就是有一个共同的地方来检查会话令牌有效,它们属于合法用户,并且该用户有权访问此资源。
如果以上是微不足道的,抱歉,也许您的问题更倾向于位于两个不同域中的网站,因此无法使用域cookie来存储会话信息。是这样吗?
答案 1 :(得分:3)
对此的规范解决方案是使用OpenID之类的协议。 OpenID允许网站要求用户使用其他站点对自己进行身份验证,然后尊重这些凭据;使用称为“属性交换”的协议,身份验证提供程序可以提供有关用户的其他数据。
OpenID是StackExchange使用您的Google帐户(或您正在使用的任何内容)登录的方式,以及SO网络中的网站如何识别您的身份,而无需您在任何地方登录。
OpenID的好处在于它是一种广泛使用的协议,因此它可能是高度安全且经过充分测试的;您不会冒险编织自己的解决方案,并且不小心让您的用户面临安全风险。它有很好的文档记录,并得到广泛支持。
有OpenID framework for .Net允许您创建自己的OpenID提供程序;看来Kentico supports OpenID as an authentication mechanism。 PHP有几个OpenID库(谷歌是你的朋友)。
具体如何实现这取决于您的Kentico身份验证现在如何工作,但原则上将Kentico用户数据库粘贴到您编写的OpenID提供程序应该相当容易;让Kentico使用它进行身份验证似乎是一个配置设置。您必须重新编写PHP站点才能使用OpenID;再次,不清楚目前的工作原理,但我无法想象它会比你尝试的任何其他解决方案更难。
答案 2 :(得分:2)
我在.net平台上遇到类似的问题,我没有选择将它们放在一个子域上。在这种情况下,您可以传递用户名和令牌(表示用户已经由站点B进行了身份验证)以及可能的加密密码以对外部数据库重新进行身份验证,然后将其重定向到站点。在我的情况下,我需要这样做,因为我正在重定向到站点管理员的相应站点CMS。