最近再做一个门户,这个门户系统下面有9个子系统,客户们为了方便要求必须实现单点登录,本人以前没有用到过SSO,还望各位大神们出点主意!

解决方案 »

  1.   

     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 是由我们内容自行指定的一个常量字符串,不暴露给任何人。)