使用Web服务的ASP.NET和Php中的SSO(单一登录)


SSO(Single Sign-on) in ASP.NET and Php using Webservices?

我正在尝试在我的asp.net和php站点中实现SSO。我在我的asp.net网站上建立了一个webservice~/webservice.asmx,提供了一个名为IsUserOnline(字符串用户名)的方法然后我把php页面编码成

require_once("nusoap/nusoap.php");
$client = new nusoap_client("http://www.myaspnetsite.com/Webservice.asmx?WSDL", "wsdl","", "", "", "");
$err = $client->getError();
if ($err) {
echo "error ..." . $err . ;
}
$param = "username";
$result = $client->call("IsUserOnline", $param, "", "", false, true);

然后我可以使用结果来检查用户是否在线。我总是可以使用代码来检查每个php页面,或者只检查一次,然后在php网站上创建登录状态。你认为这是一个好的解决方案吗?安全问题是什么?速度问题?

在站点之间执行SSO的最简单方法是共享cookie-唯一的要求是同一域(因为cookie仅在同一域中共享)。

只需创建一个负责记录用户的网站。让网站在成功登录时创建一个加密cookie。然后,每个应用程序都会检查cookie是否存在,并要求服务对其进行解密并返回用户信息。注销包括删除cookie-当用户试图访问页面时,你的所有网站都会通过注销用户来做出反应。

有几个现有的框架都是基于这个想法的,例如JOSSO。

如果您希望实现企业解决方案,请检查WS-Federation协议。它可以通过Windows Identity Foundation框架来实现。只要阅读Vittorio Bertocci的"编程Windows身份基金会"一书,你就会了解所有细节。