2

我正在尝试在我的两个应用程序之间实现单点登录身份验证,一个在 PHP 中,另一个在 .NET 中。PHP 站点当前对 .NET Web 方法进行 Web 服务调用以对用户进行身份验证。.NET 站点和 PHP 站点都使用相同的数据库。我倾向于认为我可以实现单点登录机制,如果用户登录到 php 站点,他也会自动通过 .net 站点的身份验证。CAS 身份验证似乎与我的情况有些相关。但我不确定它在我的应用程序之间的确切位置。所以让我把它分解成不同的步骤,如果我是对的,请告诉我?

  1. 用户访问 www.myphpsite.com/login

  2. 他提供用户名和密码,然后单击登录按钮。

  3. 然后对托管在与我的 .NET 应用程序 www.myDotNetApp.com 相同的服务器中的 .NET Web 方法进行 Web 服务调用

  4. Web 服务使用数据库对用户进行身份验证。

  5. CAS 必须适应这里的某个地方,并且必须确保我通过 www..com 和 www.myDotNetApp.com 的身份验证。除了这样做之外,它还必须为 www..com 站点设置一些会话变量,以便用户能够查看站点中的不同页面。

  6. 然后 Web 方法必须将用户重定向到 www.myphpsite.com 中的主页。

  7. 现在,如果用户从 www.myphpsite.com 单击指向 www.myDotNetApp.com 的链接,他必须被带到 www.myDotNetApp.com 中的个人资料页面,因为他已经通过了身份验证。

现在,有可能实现这一目标吗?如果是这样,怎么做?

4

2 回答 2

1

您提出的建议是可能的,但我建议您阅读一下 CAS 的工作原理,CAS 协议是一个很好的资源。

CAS 提供的是您的每个网站都信任的身份验证提供程序。它是您希望使用 CAS 提供身份验证的其他网站旁边的附加托管网站/服务。

根据您在示例中提供的信息,以下是最有可能发生的情况:

  1. 用户访问 PHP 网站www.myphpsite.com/login,发现用户尚未通过身份验证,PHP 网站会将用户重定向到您的 CAS 网站。

  2. CAS 网站也不会将用户识别为已通过身份验证,因此会向用户显示登录屏幕。用户输入他们的凭据,CAS 会根据数据库进行验证,然后将用户重定向回 PHP 网站。

  3. PHP 网站通过 URL 参数从 CAS 接收服务票证,并通过 CAS 进行后端 Web 服务调用来验证该服务票证。在收到来自 CAS 的服务票证是有效的确认后,PHP 然后使用其内置的身份验证过程登录用户(即 PHP 网站现在使用 CAS 验证以断言用户是真实的,而不是针对数据库进行验证)。

  4. 此时,如果用户尝试访问 .NET 网站www.myDotNetApp.com,它将无法使用其内置的身份验证程序将用户识别为已通过身份验证,因此会将用户重定向到 CAS 网站。

  5. 但是,CAS 网站已经将用户识别为已通过身份验证。CAS 不会提示用户登录,而是自动将用户重定向回 .NET 网站,提供服务票证作为 URL 参数。然后,.NET 网站将对 CAS 进行后端 Web 服务调用,以验证服务票证并使用其内置的身份验证过程登录用户。

总之,CAS 为用户提供了一个单一的身份验证位置。然后,其他网站可以将身份验证需求定向到 CAS,其中 CAS 要求用户登录或将用户识别为已登录并通知网站。

于 2013-11-13T20:33:55.820 回答
0

将 CAS 视为 HUB,将您的应用程序视为轮辐模型中的辐条。很多都是基于实现的,但这里是一般过程。

当用户点击您的 php 应用程序的受保护区域时,他们将被重定向到 CAS。他们将针对已针对您的数据库设置的 CAS 进行身份验证。成功验证后,它们将使用经过验证的令牌路由回您的应用程序并登录。如果应用程序实施正确,那么它们最终会回到他们尝试导航到的同一页面上。

当他们点击将他们发送到您的 .net 应用程序的链接时,他们会像往常一样访问。如果页面需要身份验证,那么它们会被路由到已经知道它们的 CAS,并使用经过验证的令牌将它们传回应用程序,然后进入,并且很可能从未意识到它们命中了 CAS 应用程序。

为了以防万一,我们假设PHP应用程序需要以用户身份调用.net应用程序,而不仅仅是链接到页面,而是需要以用户身份获取.net内容......CAS也支持代理,因此 php 应用程序可以模拟用户并直接调用 .net。

查看 CAS架构协议以获取更多详细信息。

于 2013-11-13T21:26:59.800 回答