我正在尝试在我的两个应用程序之间实现单点登录身份验证,一个在PHP中,另一个在.NET中。 PHP站点当前对.NET Web方法进行Web服务调用以对用户进行身份验证。 .NET站点和PHP站点都使用相同的数据库。我倾向于认为我可以实现单点登录机制,如果用户登录到php站点,他也会自动对.net站点进行身份验证。 CAS身份验证似乎与我的案例有些相关。但我不确定它在我的应用程序之间的确切位置。所以,让我分解成不同的步骤,请告诉我,如果我是对的?
用户访问www.myphpsite.com/login
他提供用户名和密码,并点击登录按钮。
然后,对与我的.NET应用程序www.myDotNetApp.com相同的服务器中托管的.NET Web方法进行Web服务调用
Web服务使用数据库对用户进行身份验证。
CAS必须适应并且必须确保我对www..com和www.myDotNetApp.com都进行了身份验证。除此之外,还必须为www..com网站设置一些会话变量,以便用户能够查看网站中的不同页面。
然后,Web方法必须将用户重定向到www.myphpsite.com的主页。
现在,如果用户从www.myphpsite.com点击www.myDotNetApp.com的链接,他必须被带到www.myDotNetApp.com的个人资料页面,因为他已经过身份验证。
< / LI> 醇>现在,有可能实现这一目标吗?如果是这样,怎么样?
答案 0 :(得分:1)
你的建议是可能的,但我建议你做一些关于CAS工作原理的文章,CAS Protocol是一个很好的资源。
CAS提供的是您的每个网站都信任的身份验证提供商。它是您希望使用CAS提供身份验证的其他网站旁边的其他托管网站/服务。
根据您在示例中提供的信息,以下是最常见的信息:
用户访问PHP网站www.myphpsite.com/login
,认识到用户尚未通过身份验证,PHP网站会将用户重定向到您的CAS网站。
CAS网站也不会将用户识别为已通过身份验证,因此会向用户显示登录屏幕。用户输入CAS验证数据库的凭据,然后将用户重定向回PHP网站。
PHP网站通过URL参数从CAS接收服务票证,它通过CAS进行后端Web服务调用进行验证。收到CAS确认服务票证是有效的PHP然后使用其内置的身份验证过程记录用户(即,不是对数据库进行验证,PHP网站现在使用CAS验证断言用户是真实的。)< / p>
此时,如果用户尝试访问.NET网站www.myDotNetApp.com
,则无法使用其内置的身份验证过程将用户识别为已通过身份验证,因此会将用户重定向到CAS网站。
但是,CAS网站已经将用户识别为已通过身份验证。 CAS不会提示用户登录,而是自动将用户重定向回.NET网站,提供服务票据作为URL参数。然后,.NET网站将对CAS进行后端Web服务调用,以验证服务票证并使用其内置的身份验证过程登录用户。
总之,CAS为用户提供了一个进行身份验证的地方。然后,其他网站可以将认证需求引导至CAS,其中CAS要求用户登录或将用户识别为已记录并通知网站。
答案 1 :(得分:0)
将CAS视为HUB,将您的应用视为集线器中的辐条&amp;说模型。很多是基于实现,但这是一般过程。
当用户点击php应用程序的受保护区域时,他们将被重定向到CAS。他们将针对已针对您的数据库设置的CAS进行身份验证。成功进行身份验证后,会使用已经过验证且已登录的令牌将其路由回您的应用程序。如果应用程序已正确实施,则最终会返回到他们尝试导航到的同一页面。
当他们点击将其发送到您的.net应用的链接时,他们会像往常一样过去。如果页面需要身份验证,那么它们将被路由到已经知道它们的CAS并将其传递回应用程序,并使用经过验证然后进入的令牌,并且很可能从未意识到它们已经访问CAS应用程序。
以防它是相关的,让我们假设PHP应用程序需要以用户身份调用.net应用程序,而不仅仅是链接到页面,而是需要以用户自己的身份获取.net内容... CAS还支持代理,因此php应用程序可以模拟用户并直接调用.net。
查看CAS architecture和protocol了解详情。