小问题,求各位大神们解答
最近再做一个门户,这个门户系统下面有9个子系统,客户们为了方便要求必须实现单点登录,本人以前没有用到过SSO,还望各位大神们出点主意!
------解决方案--------------------
9个子系统,都要开发一个简单的登录验证接口。
门户网站,在登录的时候,可以让用户选择,是哪个子系统的用户。
如果不选择,逐个调用9个子系统的验证接口,进行登录验证;
如果选择了子系统的用户,则,直接调用对应的验证接口进行验证。
其他方面,门口网站,可以通过 "子系统ID"+"子系统的用户ID 来" 来标识
门口网站的 用户ID (注意,是连接运算)。
验证接口,简单点,就是写个 动态页面,
如果页面内容为OK,则登录成功;
如果页面内容为Null,则说明用户不存在;
如果页面内容为Failed,则说明密码错误。
页面URL,可以参考:
http:// domain-name / sub-sys-project / check-login / login-interface.jsp
参数列表:
login_name : 登录用户名
login_password : 登录密码
request_src_id : 请求源的ID (一般用于有多个门户站点进行单点登录的情况)
request_time : 请求时间
check_code : 校验码 (出于安全考虑,可以添加校验码)
提交方式:
根据具体情况而定,一般采用POST进行提交,如果参数总长度很短,则可以采用PUT方式。
安全方面:
一般情况下,提交的参数,是不会暴露出来的,可以考虑将一部分的提交的参数信息,加密后提交,
子系统拿到参数后,解密后,再进行验证。
如果不想进行 加密、解密的过程,可以简化点。
将 check_code 的值,设置成 MD5(“constant_key“+"request_src_id"+"request_time") 的值。
也就是将上述 三个个参数的值连接成字符串,进行MD5加密后,当成check_code的值提交。
子系统也采用上述方法,进行check_code的对比验证,不相符的,直接丢弃。
这样可以防止一部分的非法验证。
(constant_key 是由我们内容自行指定的一个常量字符串,不暴露给任何人。)