有个奇思妙想,不知道算是天马行空还是算傻逼行为,就是想用.NET写个SSO单点登录,满足SSO的标准需求之外,还要能适应多语言的系统,比如PHP、Java等语言开发的系统。有没有大神做过?可以提供一下方案和思路咨询么?

解决方案 »

  1.   

    我先起个头吧,主要是不知道这个想法可不可行,以前做过简单的单点登录实现,不过是把凭证加密之后放在Redis里面,因为我懒得做有效时间的控制,就把凭证加密之后形成字符串扔去Redis里面,给key设置了一个有效时间,然后把这个key返回给浏览器,存在cookie里。后面使用的时候就在ASP.NET权限拦截器里面去拿到这个key。然后去Redis里面获取到对应的凭证信息。
      

  2.   

    可以啊。
    单点登录主要在于,把用户信息放在一个主服务器上存储,
    多个子系统去主服务器上确认用户是否登录验证过。那么可以将用户信息存放在主服务器的数据库或缓存里。
    其他子系统只要去访问这个缓存确认session就可以了。
      

  3.   


    那么,应用系统怎么来区分我到底是哪个用户呢?用Cookie?Cookie的话安全性如何规避?我把用户凭证加密之后存储到Redis里面,然后返回键给客户端可不可行?
      

  4.   


    那么,应用系统怎么来区分我到底是哪个用户呢?用Cookie?Cookie的话安全性如何规避?我把用户凭证加密之后存储到Redis里面,然后返回键给客户端可不可行?
    将sessionid写入cookie。
    用户登录通过sessionid去主服务器找session。
      

  5.   


    就是要其他语言编写的Web系统也能使用。比如PHP、Java。不知道能不能实现。
      

  6.   


    就是要其他语言编写的Web系统也能使用。比如PHP、Java。不知道能不能实现。能实现的。每个子系统各用一套语言都ok, 不管什么语言,都蛮复杂,网上有文章。
      

  7.   

    单点登录本来就是一个独立的网站,之间的通讯都是走 http 通用协议,跟其它网站用什么语言开发根本就是无关的。可能你们搞的所谓 SSO 还处在一个 asp.net 办公 OA 的知识范畴。
      

  8.   


    应用网站应该访问SSO网站来换取 token 对应的信息,一个网站跟SSO网站进行后台通讯,要什么 Redis?
      

  9.   


    人家(比如说微信)的 token 都是放到 url 参数中直接看到的。纠结“Cookie安全性”这就好像是问一个人的姓名如何规避一样,那就干脆所有的中国人都用法语重新起名好了。但是法语名字也并不比中文名字高大上啊?!
      

  10.   

    SSO就是一套单点登陆认证系统,说到底他有三个部分:
    1、登陆部分,这其实和以前的部分基本一致,但是有一个登陆后返回的操作,因此要预留返回地址接口等,这个部分一般都在主登陆服务器。2、各个子网站的认证部分,当用户抵达子网站,就需要一个认证接口,用户点击确认后自动登录子网站,这部分在主登陆服务器,一般用嵌入页或调用【1】的部分实现,但是实现后将会给用户返回用户专有的一组令牌(token等,具体看你的视线方式。),这个令牌将会直接传递到子网站,令牌的有效性验证由子网站通过调用接口自己实现。3、统一退出部分,这部分由主网站实现,一般来说就是一个作废所有令牌的操作。单点登录有太多现成的例子等等,可以给你一份简单的扫雷,不要去看CAS的代码了,丫的坑太多了…………
      

  11.   

    应用网站的客户端方面使用不使用 cookie 来保存授权码,这毫无所谓的“安全性”问题。因为授权码本身就是安全机制的结果,不然还要用它换取真实信息干什么?应用网站的客户端使用 cookie、url 参数等等,都很正常。开发一个服务网站,本来前提条件就是你们是专门做服务的,给不同编程语言的系统调用。跟编程语言根本无关。
      

  12.   

    嗯,应该说明一下,SSO 系统应该防备被人用“嵌入页”以钓鱼的形式来偷看密码。一旦发现 window.Top 不是自己的窗口,单点登录网页就拒绝服务。
      

  13.   

    嗯???window.Top…………大哥你这也不是正经的SSO啊。
      

  14.   

    这是前端设计,不是 http 协议设计。