首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web Service >

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

2012-12-30 
▲▲▲▲asp.net webservice单点登陆认证接口请教各位高手,我采用froms认证做了一个单点登陆平台,现在想用webs

▲▲▲▲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确权即可。


热点排行