授权
OpenUser 由 喻恒春 创作,采用 知识共享 署名 3.0 未本地化版本 许可协议 进行许可。
历史
此文最早发表在我的 老博客。原文章只是笼统的想法。博客彻底转到 OSC。准备继续探讨这个话题。文章内容会不断完善修正。
简述
数字身份识别框架已经有了大名鼎鼎的OpenID,更有Mozilla推出的BrowserID 都是流行的数字身份识别系统,这两个有什么不好么?没有!这两个没有任何问题,这两个工作的都很好,非常优秀。使用者总是要求的多,总是希望
- 更易部署:无须授权完成任意登录(ASO: Any Sign On)
- 更低资源:无需服务器端部署就可以开启工作
- 保障服务:基于固定的协议,同类型服务一致的数据结构
- 必须安全:没有更,安全就是安全。不过很明显绝对的安全是不存在的。
- 多方友好:协议细节将体现多方友好
OpenUser(以后简称OU) 试图达到这些需求。
技术概述
- 通讯平台:通过客户端进行。
- 可验证ID:用户登录名也就是用户登录ID应该具有可验证性。
- 加密登录:包括登录ID,密码都要采用不可逆加密传输。
- 任意登录:支持 OU 的站点通过简化注册或者第三方授权过程,让用户跟方便的登录
- 站点验证:因多方通讯产生的需要验证多方有效性。
通讯平台
通讯可能涉及三方:终端用户和两个服务提供方。典型的客户端就是浏览器。
可验证ID
当用户需要找回密码的时候,用户ID可以提供可验证性。最简单的用户ID就是 email
加密登录
用户输入的是非加密信息,这些信息要经不可逆加密后才传送给服务器端。 举例采用MD5加密信息。 向服务器传送:
md5(登录ID)
md5(md5(密码) + token)
token是服务器端在会话中分配给客户端的一个字符串。此字符串保存在cookie中,随提交发送至服务器。
服务器端验证: 很明显,服务器端需要保存的登录ID和密码都是是 md5 后的。然后通过 md5(登录ID) 匹配到用户数据,根据已保存的 md5(密码) 和 cookie 中的 token 来验证提交的 md5(md5(密码) + token) 是否正确。 当然如果 token 不保存在 cookie 中,而作为参数提交也不影响安全性。 现实实现中 token 可以设计成带过期验证的,这个由实现决定。
任意登录
任意登录对应目前常见的第三方授权登录。不同的是,由于 OU 设计中服务器端保存的是不可逆加密的登录ID和密码。所以授权方可以直接传递给服务器接受方,不可逆数据本身已经提供了安全保障。也许还有不可逆加密算法名称,除了MD5外还有其他算法。这种方式下,授权方已经不再履行授权的角色,履行的是用户注册有效性无责任担保角色。通过后用户信息被直接转移了。
站点验证
- 由任意登录造成的对授权方合法性验证,这需要在服务端进行。(待完善)