词条解析
- 登录:身份认证的过程
- 授权:把权限授予交给某个用户,计算机通信中这个权限就比如令牌token,电视剧中的“尚方宝剑”也可以看作是一个授权
Cookie和Authorization
Cookie
Cookie的起源:网景公司为用户做的一个网站购物车需求
- 把任何服务器希望用户存在本地的内容都存在用户的本地
Cookie的工作机制
早期Cookie实现购物车功能的示例
Cookie的作用
- 使用Cookie管理登录状态
sessionid记录当前通话,服务器可以保存多个sessionid
-
- 个性化:用户偏好、主题
- client_id标记,服务器返回记录的客户端偏好或主题
-
- Tracking:分析用户行为,描述用户画像
- 第三方公司通过cookie记录用户访问的网站等,更精准地描述用户画像,推广广告,这已经是一个非常成熟的商业模式
-
Cookie攻击
- XSS (Cross-site scripting): 跨站脚本攻击 如何预防:HttpOnly标记之后js将无法拿到用户cookie
Set-cookie:session_id=123;HttpOnly
- XSRF (Cross-site request forgery): 跨站请求伪造
Authorization
Basic
gitHub目前就采用了这种格式
格式:Authorization: Basicusername:password(Base64ed)
Bearer
可以理解为持票人方式
格式:Authorization: Bearer
OAuth2
- 如图:三方登录授权过程,以掘金为例:使用微博登录,实际上就是微博把权限授予了掘金,允许掘金获取用户微博账号的某些关键信息,如账号id,账号名,头像等
-
- 从技术角度上,授权登录更准确地讲应该叫社交网络登录,国内把授权登录称作三方登录更多是从产品角度来讲的
OAuth2流程
以掘金github登录为例,分为授权和登录两个流程
- 授权流程
-
- 登录流程
-
微信登录是一个典型的OAuth2流程
自家App中使用Bearer Token
Refresh Token
目的:安全
- 通过refresh_token也就是原来的token(母钥匙)获取新的有效token:ascess_token
- 当 access token 失窃时,可以保证盗窃者在未被发现的情况下也只能在一段时间内使用 token,并且在发现 token 失窃之后可以立即换上新的 token 而无需用户重新授权
{
"token_type": "Bearer",
"ascess_token": "xxXxx",
"refresh_token": "xxxXX",
"expires_time": "xxXxx"
}