前言
1.最近公司做的系统增加了不少,需要考虑用户的登录问题,于是在网上了解了一番SSO,好像大部分都写得有问题,比如说所有子系统都用同一个sso生成的令牌ID,不谈ID是否加密的,加密还好,明文的不就完蛋了吗,要知道子系统通过这个ID换取最终的子系统中要使用的用户ID或信息,该操作是子系统通过web请求sso来实现的,不是从浏览器发出的,而是在系统的服务上发出的请求,莫非sso里面要做IP请求限制吗?不处理的话任何人拿到这个令牌ID不都可以直接进入子系统了吗?(此处不要犯迷糊,说什么其他人又没有登录SSO没有cookie或者session,说这个有什么用呢?还是说请求是从服务器通过webrequest请求的SSO,莫非服务器上有保存的cookie,还是说你很牛逼,能跨域读取cookie)
2.还有说什么维护一个子系统的列表通过轮循的方式给系统发请求然后写cookie,先不说安全,我想说要是有100个系统接入使用这一个sso,用户想用其中的一个,你也要轮循100次啊,那用户可以洗洗睡了用户用的正好是第一百个,等你轮循过来,用户都睡醒一觉了,再说安全方面,sso能给你发请求,其他人就不能往你这个地址发请求吗?要知道sso主动给子系统发请求,和sso通知子系统让子系统来请求sso是不一样的,虽然可以加密或者校验,何必呢,这不是自己给自己找事做吗.
3.还有说什么注销的,不知道有没有搞清楚sso的意图,是单点登录,或者说是授权用户能够通过验证后使用最终的产品,只要用户验证通过,sso就和子系统之间没有关系了,说白一点,SSO就是只负责用户能够进入房间的一道门,至于你进去做什么,什么时候出来,从哪里出来SSO都管不了,有时候sso保存的cookie或者session到期了,子系统是照样可以用的,因为子系统已经被授权可以使用了,但如果退出子系统想再次登录就需要再次输入账号密码了.举例说明:用户登录sso成功后cooike或者session有效期1个小时,用户成功进入了子系统,然后子系统里面使用cookie保存用户的ID等信息有效期1天,那用户只要是用这个浏览器登录这个子系统一天内都不需要登录账号密码,即便是sso的登录已经超时.
我们要达到的目的:
1.不给