▲▲▲▲asp.net webservice单点登陆认证接口解决思路

▲▲▲▲asp.net webservice单点登陆认证接口
请教各位高手,我采用froms认证做了一个单点登陆平台,现在想用webservice做一认证接口,接口中有一方法叫getusername(),当用户通过主站(假设为A站点)认证通过后,访问其它站点时(假设为B站点),B站可以调用接口的getusername()方法,如果返回用户账号说明已登陆,如果返回为空,说明没有登陆认证。
问题:应该如何写getusername()方法,使之可能返回当前用户的账号?
------解决方案--------------------
首先你这个单点登录涉及到一个浏览器跨域的问题,也就是说,你在A认证通过后,A的session中或者是application中记录了当前用户的登录情况。比如说你使用全局的datatable来存放相关登录情况,可以使用sessionid和userid来检索。那么当你在当前窗口点击B系统的链接时,是你是无法得到A系统的相关情况的,特别是A系统的sessionid。
你可以采用以下方法,来告知系统B你在A系统中登录的情况。

1、用B系统链接上加上A系统的sessionid的方式来做。
   进入B系统后使用这一个sessoinid向A系统中的webservice进行验证。

2、用页面提交。A系统登录后使用一隐藏帧、form或ajax将当前A系统sessionid提交到B系统。此时当前窗口获取到了B系统的sessionid.并在B系统session中记录了a系统中的sessionid。在访问B系统页面时,可根据session中的A系统sessionid进行对A中一个确权webservic进行访问,获取是否登录和权限的相关信息。

3、使用jsonp,在A系统中,提供一个axhx页。
如下输出
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            context.Response.Write(" getUserCallBack({\"Name\": \"Foo\", \"Id\" : 1234, \"Role\": 1
------解决方案--------------------
7
------解决方案--------------------
9
------解决方案--------------------
8
------解决方案--------------------
5, \"UCLC_SessionID\" : " + context.Session.SessionID.ToString() + " });");
        }
在b系统中可以使用
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
    <script  type="text/javascript" src="js/jquery-1.7.1.min.js"></script>
    <script type="text/javascript">
    function getUserCallBack(data)
    {
        $("#other_sessionid").val ( data.UCLC_SessionID);
    }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    localhost web  server sessionid :<input type="text" runat="server" id="localhost_sessionid" value="" name="localhost_sessionid"/><br />
    other domain  web server sessionid:<input type="text" id="other_sessionid" value="nothing" name="other_sessionid" /><br />
    <script src="http://A系统/a.ashx" type="text/javascript" ></script>
    </div>
    </form>
</body>
</html>

   则在B系统的页面上可以获取,你当初在A系统中使用的session中的数据。再使用这些数据在服务器端进行webservice确权即可。