使用CAS进行单一登录认证

时间:2013-11-12 22:00:21

标签: php .net authentication single-sign-on cas

我正在尝试在我的两个应用程序之间实现单点登录身份验证,一个在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的个人资料页面,因为他已经过身份验证。

    < / LI>

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

2 个答案:

答案 0 :(得分:1)

你的建议是可能的,但我建议你做一些关于CAS工作原理的文章,CAS Protocol是一个很好的资源。

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

根据您在示例中提供的信息,以下是最常见的信息:

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

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

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

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

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

  6. 总之,CAS为用户提供了一个进行身份验证的地方。然后,其他网站可以将认证需求引导至CAS,其中CAS要求用户登录或将用户识别为已记录并通知网站。

答案 1 :(得分:0)

将CAS视为HUB,将您的应用视为集线器中的辐条&amp;说模型。很多是基于实现,但这是一般过程。

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

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

以防它是相关的,让我们假设PHP应用程序需要以用户身份调用.net应用程序,而不仅仅是链接到页面,而是需要以用户自己的身份获取.net内容... CAS还支持代理,因此php应用程序可以模拟用户并直接调用.net。

查看CAS architectureprotocol了解详情。