一种比较简单的web端SSO方案,websso方案


这是种比较简单易行单点登录(SSO Single sign-on方案,只有auth token,没有request token,自己家的系统集成提供一点思路。文章的阅读对象需要比较熟悉web开发,因为省去了很多前置知识。

认证流程

单点登录的几个角色,单点登录服务(center), 接入的应用叫做客户端(client)。 当然描述的时候会涉及浏览器(browser),还有用户

  • http://localhost:9080 是用户要登录的应用
  • https://localhost:8443 是认证中心,提供sso认证的服务端

交互过程描述,可以想象成在一个论坛上进行QQ登录

ticket的算法比较多的是使用md5或者sha-1q签名,客户端和单点登录服务端都有一个key,通过对某些信息做签名,验证数据的合法行。OpenResty - 基于MD5的参数签名认证 有提到过。

还有些问题需要解决,例如怎么退出,怎么记录不同的客户端。。根据实际情况在进行设计,参考这篇单点登录是怎么回事

下面是一张交互图

用户在每个客户端的登录状态是独立,SSO服务只提供用户认证,不提供用户权限等信息。

如果是要做平台,请参考 OAuth2.0协议,很多主流平台都用这个协议来做API或者是第三方认证平台,可以看看微博或者QQ登录的接入API。还有其它的开源解决方案,暂时没怎么研究过。

安全

  • 一定要记得启用https
  • 限制ticket的有效期
  • 客户端拿着ticket去换取用户信息的时候,加入签名等

参考

  • https://yq.aliyun.com/articles/42566 说的比较详细,通俗易懂一些,说了很多这里没有说明的问题。
  • https://pypi.python.org/pypi/django-simple-sso 这是个django的sso实现,它这里还添加了request token,也就是在第一步客户端验证需要登录的时候,先要获取一个 request token(服务器之间的交互), 然后拿着这个token,在换 auth token,后面基本相同了。

相关内容

    暂无相关文章