登录和授权那些事

登录与授权的区别?

登录:身份认证的过程,输入正确的账号密码 ,服务器确认之后完成登录

授权:把权限授予

 

 

 

Cookie:

起源:购物车,原始的互联网开始的时候一些电商网站提出购物车的功能,并在本地记录,服务器不想记录

工作机制:服务器需要你所保存的数据,服务器就会发过来,再保存在本地,举例:在购物车添加一个苹果,那么如图:

客户端在购物车添加了一个苹果,那么客户端就会往服务器发送一个post请求,body为apple=1;然后服务器返回了该数据,作为cookie

 

严格来说,cookie属于一个机制,也是header的一部分,现在逐渐在抛弃cookie做登录状态

 

用cookie来管理登录状态流程:

首先,客户端发送账号密码,服务端接收到登录信息,确认之后记录登录状态: 即username=a;(大概信息,理解意思),然后服务器为这件事再创建一个会话,会话表示在个某个客户端或者用户代理沟通,可能是登录也可能未登录,记录下此状态后,建立一个session,然后用session与之关联,并把该session发给客户端

然后客户端再发送请求的时候,在携带上这个session,服务器端就会根据这个session来判断该用户是否存在,时候处于登录状态,确认完毕,服务器就发送确认数据

然后管理购物车可以这样:

其中session管理登录信息,cart管理购物车信息,同属于cookie

 

作用:

1.会话管理:登录,购物车等(上述图以解释清楚)

2.个性化:用户偏好,主题,如图:

服务器给我返回的client_id所包含的信息就是主题信息,就像sessionid一样,也是服务器发送给客户端,然后客户端携带的,只是功能不同,如果我想换别的主题了:

我想换成蓝色主题,所以Cookie中的client-id变为123,服务器返回,客户端更新client_id,完成主题更换,每次请求携带的client_id就会成为123

3.Tracking:分析用户行为,如图:

客户端访问某个网站,该网站返回了一张图片,该图片中是属于第三方的,并记录了该网站的信息,这种分析用户行为的网站都不是一个,而是一个站点,来分析多个网站中用户的行为,然后会往第三方网站发请求然后该网站就会记录一下,该请求来自与shop.com,同样的道理,如果这个请求来自淘宝,也会被记录下来,这样就能分析出用户的喜好

 

 

注意:cookie是可以有多个的

 

 

 

 

XSS(Cross-site scripting):HttpOnly   跨站脚本攻击

 

比如js中有一些恶心信息,把你的有敏感信息的cookie发给别人,那么你的信息就被泄露了,所以在cookie上加一个HttpOnly 限制,防止脚本拿到cookie之后就发走,如图:

 

所以作用是;本地的脚本看不到,只能用于http的信息交换

 

 

 

XSRF (Cross-site request forgery): Referer  跨站请求伪造

 

比如你登录一个钓鱼网站,网站上有个图片点击达到银行网站,而我刚刚访问过银行,然后通过cookie这个网站就可以把钱转走,因为刚才访问银行,有cookie,cookie是自动的,无需登录和确认

作用是:来实现哪个网站跳转过来的,如果这个网站服务器是来自于危险网站,则拒绝转账

缺陷:浏览器需要有这个功能,如果不能帮加这个,还是没有作用

 

 

 

Authorization:

 

1.Basic   基本授权方式

 

常用方式:

即对 username:psaaword 的格式做一个base64,如图:

然后添加到header里:

Basic后面即生成的base64值

 

 

为什么是basic:因为是最基本的信息

 

缺陷:会有安全问题,一般用https请求,会安全很多,所以需要把用户名和密码加密后或加密前都可以存在本地,不然还需要在不同的页面输入;比如安卓手机root之后把权限给了某个软件,这样某个软件就可能会盗走账号密码,但是这是用户行为,root手机就相当于放弃安全保障

 

 

 

 

2.Bearer     拿着尚方宝剑的人,即被授予了权限也可以行使同样的权利

 

使用方式:

OAuth2:第三方认证流程

 

流程:用我访问掘金,用github登录:

图中:3rd-party.com表示掘金网站,点击登录方式为github时,github会发送一个Authorization Code给掘金,这并不是token,相当于一个保证,比如我在发送这个code的过程中可能会被拦截,还有可能是浏览器的安全问题,导致我直接发送token会被拦截,发送这个code相当于一个意愿,表明我愿意赋予给掘金权限,然后掘金会把这个值发送给服务器:

服务器会把这个值以及 client_secret 发送给github来请求:

其中client_secret是绝对保密的,别人都看不到,sever到github间的链接是绝对安全的链接,是HTTPS的,client_secret来证明身份,表明我确实是我,相当于身份证,这个时候github在足够安全的情况下拿到了足够多的信息来证明对方是安全的,就会把access token 发给服务器  

此时,sever拿到了access token ,OAuth2流程结束

 

 

然后的操作就是用这个access token完成,比如我要获取github的头像信息,sever就会往github申请:

具体申请信息是这样的:

注意:有的软件是这样做的:sever在获取到token了之后,直接发送给客户端的掘金,然后由掘金申请信息,这样是可以的,但是不是安全的,因为发送给客户端token以及客户端发送给github的过程是不安全的,这就浪费了OAuth2的优点,尽量不要这样

 

 

其中有一个非常容易混淆的问题:第三方登录和第三方授权的区别是啥?

第三方授权:原来是我跟github的信息,分享给掘金了,这时第三方是掘金

第三方登录:我登录掘金,github就是第三方了  

 

 

 

微信登录:第三方登录,比如我访问一个网站,用微信登录,用的是完整OAuth2过程,目的是为了安全,不是为了省事

 

 

自家app使用bearer token (简便的Oauth2)

 

 

Refresh Token:流程跟OAuth2一致,就是github在往server发送token的时候发送的是一个Refresh Token ,然后server用这个Refresh Token去申请,github会给一个新的Refresh Token和access token,每申请一次会给一个新的Refresh Token,原来的Refresh Token失效

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值