3

我有 2 个网站:

  • 站点 A - 一个 asp.net 站点
  • 站点 B - 一个 php 站点

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

有没有办法实现这种形式的身份验证。还是不可能?

4

3 回答 3

3

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

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

如果以上内容很简单,抱歉,您的问题可能更针对位于两个不同域中的站点,因此无法使用域 cookie 来存储会话信息。是这样吗?

于 2013-01-03T16:49:53.747 回答
3

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

OpenID 是 StackExchange 设法让您使用您的 Google 帐户(或您使用的任何帐户)登录的方式,以及 SO 网络中的站点如何识别您的身份,而无需您在任何地方登录。

OpenID 的好处是它是一种广泛使用的协议,因此它很可能是高度安全且经过良好测试的;您不会冒险编写自己的解决方案,也不会不小心让您的用户面临安全风险。它有据可查,并得到广泛支持。

.Net有一个OpenID 框架,可让您创建自己的 OpenID 提供程序;看来Kentico 支持 OpenID 作为身份验证机制。有几个用于 PHP 的 OpenID 库(Google 是你的朋友)。

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

于 2013-01-03T17:16:18.610 回答
2

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

于 2013-02-08T19:59:16.300 回答