本文共 1489 字,大约阅读时间需要 4 分钟。
目前登录凭证的方式无非两种:
一个是通过服务器端的session,一个是通过浏览器的cookie. 简而言之:session和cookie常规的是通过session
步骤: 1,用户在浏览器登录 2,后台鉴权,若登录成功,则把用户信息写入session,servlet自动生成JSESSIONID 返回浏览器; 3,浏览器把JSESSIONID 写入cookie 说明:cookie是浏览器的存储文件,存储的只是JSESSIONID,而不是用户信息; JSESSIONID 只是一个钩子,用户信息其实存储在服务器端.比如我在浏览器登录之后,重新打开一个标签页,输入相同的地址,仍然是登录状态,因为标签页共享cookie.
也就是说我只要获取到JSESSIONID ,就可以获取用户隐私信息,比如除用户名以外的其他信息(密码,姓名,年龄等).也可以做一些敏感操作,比如修改密码浏览器发送请求时会带上cookie
这样服务器端才知道是否登录过:例如,我获取到JSESSIONID 之后,使用HTTP模拟发送请求:
服务器端是如何判断是否登录
如果通过cookie呢?
详细流程,逻辑 (1)登录前,浏览器先向认证服务器请求一个OTP,认证服务器返回OTP,同时返回一个cookie给浏览器;
(2)认证服务器把OTP 和CCC(cookie) 挂钩;
(3)登录时连同带上OTP (4)若登录成功,则认证服务器返回登录凭证(access token)给应用服务器; (5)认证服务器把CCC 和登录凭证挂钩; (6)通过CCC 可以判断用户是否有权限.所以,
(a)可以通过CCC 获取登录凭证 (b)也可以通过OTP 获取登录凭证根本原因:服务器把OTP 和CCC(cookie) 挂钩
那么CCC记在什么地方?
浏览器
参考:http://blog.csdn.net/hw1287789687/article/details/48373209
segmentfault 登录时,竟然使用明文密码: