在A中可以连接B的链接(页面)中存放用户U的登录信息(需要加密),当提交到B时自动验证通过。反之依然

解决方案 »

  1.   

    多谢zych72(闹闹)
    但是仅仅这样的话至少存在以下两个问题:
    1、重发攻击,如果该http请求报文被截取并重发,则非法用户亦可访问B。
    2、如果用户不是以点击链接的方式请求访问B,而是在浏览器中输入B的网址,则B的链接(页面)中存放的用户U的登录信息无法起作用。
      

  2.   

    两份同样的用户库分别在A和B同时存在。在用户登陆和退出时做文章:在A中登陆后把该用户的登陆信息同时写到B,反之亦然。用户退出时也一样把另外一服务器的登陆信息注销。保证两边在线用户保持同步。
    这样总行了吧。给分吧:)
      

  3.   


    做客户端的判断阿比如:cookies,session阿之类的/*--by bookbobby(书呆)-+
     |            |
     |  你说爱我只是习惯  |
     |  再也不是喜欢    |
     |  我给你的爱     |
     |  已不再温暖     |
     |            |
     +--by bookbobby(书呆)-*/
      

  4.   

    1 我觉得如果客户端和服务器之间是无连接的,则无论如何也防止不聊无法重发攻击。
    2 的方法应该是使用post方法,则可以在提交时把页面里的用户信息一起提交上去。
      

  5.   

    和qiu(程痴)讨论:
    你的方案还是存在几个问题:
    1、如果Web服务器不支持global.jsa(或者global.asa),WEB服务器如何判断用户的会话结束(即你所说的退出)?
    2、你所说的似乎距离WEB站点(或应用系统)单点登录的概念远了一些,例如如果用户现在登录到站点A,访问了A中几个页面后想访问B(A和B在物理上相距很远,由不同公司的Web服务器提供),用户可以通过在浏览器地址栏中输入或者点击A中某个页面上的链接的方式发送访问B的请求,这时B都应该能确认这个发送请求的用户是A中的合法用户并且已经经过A的身份认证,问题就是由于WEB应用中客户端和服务器的无连接性,B如何能知道发送请求的用户是谁(如果用户只在A中访问,则可以用session变量标记该用户,而跨站点时session或cookie当然就无效了)?所以我认为在A和B各自的身份认证服务器之间应该做一些动作,而最主要一点的就是B站点如何根据一个http访问请求判断用户身份和在A站的认证状态。
    我觉得WEB方式的单点登录涉及的问题相当多,所以希望能和大家仔细讨论一下,因为国外在这方面已经做了很多工作,但具体的实现方式还看不到。
      

  6.   

    zych72(闹闹):
    如果用户新开一个浏览器页面输入网址呢,如何能把用户信息一起提交?
      

  7.   

    bookbooby():
    跨站点的话,如何应用cookie或者session呢?
    我也觉得问题的关键在客户端一方,但想不出解决办法。
      

  8.   

    把A的SESSION提交到B的页面,在B的数据库中有相同的用户表,把SESSION的内容提出来,进行严正就行了啊。
      

  9.   

    接上:
    用cookie或者session来保存该用户的信息,主要是该客户的一些基本属性,包括是否超时!
      

  10.   

    glitter, 你说的session问题确实不好解决。不过我认为实现session的远程同步实际上有点得不偿失。因为你现在的需求只是要做到两边用户名和权限的统一。
    我觉得用cookie记录客户名称再加上一个已登录用户列表的方法是可行的简单的解决方案。两边服务器可以同步登陆和退出的客户纪录,然后通过cookie中记录的客户名即可判断该客户是否已经登录过了。
    比如甲客户登录了A,在A有一个sessionA,再去访问B(不论它使用什么方式),B会知道甲。已经在A登录过了,就不再让甲登录,并直接为甲创建一个新的sessionB,给甲一定的权限。我的实现方法是:当甲登录A时,A服务器会同时对B服务器发送一个通知,让B把甲加入到已登录用户的列表中(或者A和B共同维护一个已登录用户的列表,每次有人登录或退出,A和B都更新给地址的内容),接着A为甲分配sessionA,并把甲的用户名写入cookie中。当甲访问B时,B先跟据cookie中的用户名信息在以登录用户列表中查找,如果找到了就直接为甲建立sessionB,并附上权限。sessionA和sessionB不需要同步。不知以上方案是否满足你的要求?
      

  11.   

    qiu(程痴):
    谢谢,你的这个思路跟我是一致的,但我不知道cookie能否跨站点使用,就是说A为用户建的cookie当用户访问B时能在B中使用么(我看资料说好像是不能用的),我就是这一点搞不清楚,如果能用的话,你的方案确实很可行。还有一个问题,用户登录事件服务器比较容易判断,但是用户退出的话Web服务器如何判断呢,是不是只能用global.jsa还是有别的方法可以实现?
    ggzzkk和xmvigour,你们能不能把思路说的更详细一些,谢谢。
      

  12.   

    glitter:
    cookie是可以跨站点的,关键看你怎么设定他的领域,你可以设定它属于.com或者A.com, B.com。不知你说的这两台机器是否在同一域名下?比如:A.test.com和B.test.com,这样你只要设定该cookie属于test.com的,那么就两边都能收到cookie了。如果不是同一域名下你就只好把他设在根下了。祝你成功:)
    别忘了给分,哈哈
      

  13.   


    qiu(程痴)说所不错。可以给分了。:)
      

  14.   

    多谢qiu(程痴),这样的话问题就简单的多了,呵呵。
    另外一个问题如何解决,即Web服务器如何判断用户结束会话的事件,因为服务器方需要在用户结束会话时将该用户从登录成功的用户列表中删除。
      

  15.   

    无法判断会话结束只能利用超时的话就会有安全漏洞的,比较头疼的说。
    global.jsa倒是可以用来判断会话的结束,但不是所有的Web服务器都支持,麻烦。