发布时间:2013-09-27 发布者:本地
SSO服务设计,Single Sign On(单点登录)即只要用户在经过该服务的认证后,那么在所属的应用范围下都无需再次进行登录操作就能被认证,无论是否跨域。
介绍一下本人接触过的SSO服务最简单的一种流程:
1、用户的登录请求被跳转到SSO,SSO进行常规账户名及密码匹配,匹配成功则继续。
2、SSO根据用户账户信息生成HMAC码,生成方法是利用SSO和所属应用相同的算法计算后得到的一个字符串。具体算法是使用一个密钥,然后将用户的账户信息、有效时间戳等串起来进行散列计算(如使用MD5)得到HMAC码。
3、SSO通过网页跳转将用户重定向到目标应用,重定向内容附带用户的账户信息(不包含密码)、HMAC码及有效时间戳。
4、目标应用通过读取用户跳转传入的账户信息、HMAC码、有效时间戳,运行与SSO一致的计算过程得到自己的值。
5、目标应用将得到的HMAC码与传入的进行比较,如果两个码相等,则检查有效时间戳是否超时,如果未超时则认为该用户通过认证,直接利用传入的账户信息为该用户创建会话数据。
通过以上流程可以知道:
1、用户的用户名密码等账户信息是保存在SSO的数据库上面的。
2、其他应用只是通过跳转获得了账户信息,如果校验成功就认证创建会话。
3、SSO与所属的应用使用了一致的HMAC生成算法和密钥,这样在无法知道密钥和生成算法的情况下无法伪造相关信息。
4、有效时间戳是为了保证该信息在有效时间外不会被重复使用。
5、更安全的做法是将相关数据存放在SSO上,跳转时只生成传递一个唯一令牌给其他应用,其他应用拿到该令牌后需要通过接口远程调用SSO来进行校验,当然SSO的校验接口还需要对来源地址进行限定等,流程更加复杂。