开发框架-身份鉴权,sso,数据安全(防篡改)
- 需求:
客户代理身份鉴定:即证明你就是你
请求数据防篡改:防止黑客篡改请求数据后发起虚假请求而服务器又无法鉴别请求是否被篡改.
sso:单点登陆.
- 实现:
参考kerberos协议这里讨论不使用cookie,而是使用每一个请求带认证信息的方式.
一个请求包括:请求数据(不能为空,并至少包括请求发起时间参数)+认证信息
所有请求附带认证信息内容包括:ticket(一个认证服务给予的临时票据),认证信息(请求数据的摘要信息(防请求数据被篡改), 由认证服务给予的临时key打包加密)
- 流程:
所有请求被拦截器拦截,无ticket或非法ticket跳转至统一登陆页面
(ticket合法性:使用ticket去redis中找到tiket对应的信息(包括临时key),使用key对认证信息进行解密,得到数据和ticket以及请求数据比较一致则合法.简化可以使用des加密算法,更安全应该使用非对称加密算法)
由登陆页面发起login,数据库查询判断,用户名密码是否有效.
有效则生成ticket与临时key并用用户的密码加密后返回,同时使用临时ticket为key,临时密钥,用户信息等为value保存到redis,并设置有效期为12小时(这里实际上简化了kerberos协议,按协议还要有票据的票据)
客户用登陆密码解密后得到ticket与临时key
客户以后发起请求必须附带认证信息(内容见前文).
客户注销,服务器清除ticket相关信息.
超过12小时自动,服务端返回ticket过期消息,客户端需要发起续租请求,请求要再次输入用户名与密码.
sso:所有域的服务器端,只要判断请求的认证信息合法,则允许访问.这要求所有服务器端都能访问redis中的信息.
- 进阶:
登陆与续租请求使用https协议.以后请求可以不使用
使用对称加密算法加密认证信息.
使用完全kerberos协议实现.
使用cookie保存ticket.