HCL03--登录授权、TCP/IP、HTTPS和代理

1.登录与授权的概念区别

1.登录:是用户身份认证,系统确认用户身份的过程。
2.授权:是由身份或者持有的令牌来确认用户享有某些权限,登录过程实质上的目的是为了确认权限。

2.HTTP中确认授权的两种方式

1.通过cookie
2.通过Authorization Header

Cookie

1.起源:有Netscape浏览器团队开发实现了购物车功功能。

2.工作机制:

1.服务器端需要客户端存储的数据都会通过set-cookie放在reponse的header里面返回,客户端自动保存。
2.客户端保存的cookie,在之后的请求中,会放在request的header里面发送给服务端。
3.客户端保存cookie是按照域名来区分的。
4.客户端保存的cookie有超时时间,如果未设置超时时间,则在浏览器关闭时删除cookie,另外服务器还可以主动删除未过期的客户端cookie。

3.cookie的作用:

1.会话管理:比如用户登录状态,用户购物车管理。
2.用户的个性化设置:比如主题,颜色,壁纸等等。
3.分析用户行为:可以使用cookie来追踪用户行为。

4.HttpOnly与Secure属性

1.如果在cookie中设置了HttpOnly属性,那么通过程序(比如JS脚本,Applet等)就无法读取cookie信息,这样能有效预防XSS攻击。
2.secure属性:当设置为true时,表示创建的cookie只能以安全的形式传送给服务器,也就是说只能在HTTPS连接中被浏览器传递到服务器端进行会话验证,如果是HTTP连接,那么就不会传递信息,所以不会被窃取到Cookie的具体内容。

5.XSS

跨站脚本攻击,利用JavaScript来拿到浏览器的cookie之后,发送到自己的网站,以此来盗取用户信息。

6.XSRF

跨站请求伪造,在用户不知情的情况下访问已经保存了cookie的网站,以此来越权操作用户账户。

Authorization

两种主流方式 Basic 和 Bearer

Basic

1.格式:Authorization: Basic<username:password(Base64)>
2.Basic认证过程
1.浏览器发送请求到服务器
                GET / HTTP /1.1
                Host:xxx.xxx.com
2.服务端发送验证请求401
                HTTP/1.1 401 Unauthorised
                Server: bfe/1.0.8.18
                WWW-Authenticate: Basic realm="XXXXX.com"
                Content-Type: text/html; charset=utf-8
3.客户端收到401返回值后,将自动弹出登录窗口,等待用户输入用户名,密码
4.将用户名密码进行Base64编码后发送给服务端进行验证
                GET / HTTP/1.1
                Host: xxx.xxx.xxx.com
                Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxxxxxx
5.服务端取出Authorization中头信息,并与数据库进行比对,如果合法则返回200,不合法,则返回401。

Bearer

1.格式:Authorization: Bearer <bearer token>
2.bearer token 的获取方式:通过OAuth2的授权流程
3.OAuth2的流程
            1.第三方网站向授权网站申请授权合作,拿到client id和client secret
            2.用户在使用第三方网站的时候,点击通过授权,第三方网站将跳转授权网站,并将clientid传递给授权网站。
            4.授权方网站根据clientid,将第三方网站的信息和第三方网站需要的用户权限展示给用户,询问用户是否同意授权。
            5.当用户点击同意授权,授权方网站返回第三方网站,并传入Authorization code作为用户认可的凭证。
            6.第三方网站将Authorization code上送给自己的服务器,服务器将Authorization code跟自己服务器端存储的client secret发送给授权方服务器,授权方服务器通过验证后,返回给access token,整个OAuth2流程结束。
            7.在整个OAuth流程结束后,第三方网站服务器可以试用access token 作用用户授权的token,用此来向授权方网站请求获取用户信息等操作。
        
4.问题:
            为什么OAuth认证要引入Authorization code,并且需要申请授权的第三方将Authorization code传给第三方服务器,并且通过第三方服务器将Authorization code传递给授权方服务器。然后再获取授权方服务器的access token。这样做的目的是为了通信安全,因为OAuth不强制使用HTTPS,因此需要保证通信路径中存在窃听者的时候,还能保证足够的安全。
            
5.第三方APP通过微信登录的流程:
            这是一个标准的OAuth2的流程。
            1.第三方APP向腾讯方申请合作,拿到client id 和client secret
            2.当用户在第三方APP上需要微信登录的时候,第三方APP将使用微信SDK打开微信授权页面,并且传入client id作为自己授权id。
            3.微信拿到第三方app的client id后,提交微信后台,验证成功,则返回给第三方app Authorization code。
            4.第三方app拿到Authorization code后,将Authorization code传递给自己的服务器,第三方app的服务端将Authorization code 与 client secret 传递给微信后台,微信后台验证后返回access token。
            5.第三方app后台通过access token 想微信后台请求获取用户信息,微信验证通过后,则返回用户信息。
            6.服务器接受到用户信息后,在自己的数据库中建立一个账户,并将从微信获取的用户信息填入数据库中。并创建用户id,并将此id与微信id做好关联。
            7.当第三方app后台创建好用户后,想客户端的请求发出响应,并回传会刚刚创建的用户信息。
            8.客户端响应,获取用户信息,登录成功。
            
6.在自家APP中使用Bearer token
            部分app会在api设计中,将登录和授权设计出类似于OAuth2的过程,他会简化掉Authorization code的概念。既直接在接口请求成功后,返回access token,然后再之后的客户端的请求中,使用这个access token 作为Bearer token进行用户操作。
            
7.Refresh token
            Access token 都会有失效时间,当他失效后,第三方app的服务端会通过refresh token 接口传入refresh token 来获取新的access token。这样的的原因是安全,因为refresh token是放置在服务端的,即使access token被窃取,他也是有失效时间的。

3 TCP/IP 协议族

1.概念

两台计算机之间的通讯是通过TCP/IP协议在因特网上进行的。实际上TCP/IP是两个协议
TCP:Transmission Control Protocol 传输控制协议 IP:Internet Protocol 网际协议

IP:计算机之间的通信
IP协议是计算机用来相互识别的通信的一种机制,每台计算机都有一个IP。用来在internet上标识这台计算机。IP负责在因特网上发送和接受数据包。通过IP,消息(或者其他数据)被分割为小的独立的包,并且通过因特网再计算机之间传送。IP负责将每个包路由至他的目的地。
IP协议仅仅是允许计算机相互发送消息,但他并不检查消息是否以发送的次序到达并且没有损坏(只检查关键的头部信息)。为了提供消息检验功能,直接再IP协议上设计了传输控制协议TCP。

TCP:应用程序之间的通信
TCP确保数据以正确的次序到达,并且尝试确认数据包的内容没有改变。TCP在IP地址之上引端口(port),他允许计算机通过网络提供各种服务。一些端口号为不变通的服务器保留,而且这些端口号是众所周知的。
服务或者守护进程:在提供服务的机器上,有程序监听特定端口上的通信流。例如大多数电子邮件通信流出现在端口25上,用于www的HTTP通信流出现在80端口上。
当应用程序希望通过TCP与另一个应用程序通信时,他会发送一个通信请求。这个请求必须被送到一个确切的地址。再双方"握手"之后,TCP将两个应用程序直接建立全双工(full-duplex)的通信,占用两个计算机之间的整个通信线路。TCP用于从应用程序到网络的数据传输控制。TCP负责在数据传送之前将他们分割为IP包,然后再他们到达的时候将他们重组。

TCP/IP就是TCP和IP两个协议在一起的协同工作,有上下层的关系。

TCP负责应用软件和网络软件之间的通信,IP负责计算机之间的通信。TCP负责将数据分割并装入IP包,IP负责将包发送至接受者,传输过程中药经IP路由器负责跟进通信量、网络中的错误或者其他参数来进行正确寻址,然后再他们到达的时候重新组合他们。

2.为什么要分层

因为网络具有不稳定行,保证通信正常。

3.具体分层

 

 1. 网络接口层:

实际上TCP/IP参考模型没有真正描述这一层的实现,只是要求能够提供给其上层-网络互连层一个访问接口,以便在其上传递IP分组。由于这一层次未被定义,所以其具体的实现方法将随着网络类型的不同而不同。  

2. 网络层:

网络层是整个TCP/IP协议栈的核心。它的功能是把分组发往目标网络或主机。同时,为了尽快地发送分组,可能需要沿不同的路径同时进行分组传递。因此,分组到达的顺序和发送的顺序可能不同,这就需要上层必须对分组进行排序。网络互连层定义了分组格式和协议,即IP协议(Internet Protocol)。网络互连层除了需要完成路由的功能外,也可以完成将不同类型的网络(异构网)互连的任务。除此之外,网络互连层还需要完成拥塞控制的功能。  

  3. 传输层:

在TCP/IP模型中,传输层的功能是使源端主机和目标端主机上的对等实体可以进行会话。在传输层定义了两种服务质量不同的协议。即:传输控制协议TCP(transmission control protocol)和用户数据报协议UDP(user datagram protocol)。  

TCP协议是一个面向连接的、可靠的协议。它将一台主机发出的字节流无差错地发往互联网上的其他主机。在发送端,它负责把上层传送下来的字节流分成报文段并传递给下层。在接收端,它负责把收到的报文进行重组后递交给上层。TCP协议还要处理端到端的流量控制,以避免缓慢接收的接收方没有足够的缓冲区接收发送方发送的大量数据。 

UDP协议是一个不可靠的、无连接协议,主要适用于不需要对报文进行排序和流量控制的场合。 

 4. 应用层 :

  TCP/IP模型将OSI参考模型中的会话层和表示层的功能合并到应用层实现。应用层面向不同的网络应用引入了不同的应用层协议。其中,有基于TCP协议的,如文件传输协议(File Transfer Protocol,FTP)、虚拟终端协议(TELNET)、超文本链接协议(Hyper Text Transfer Protocol,HTTP),也有基于UDP协议的。

4.TCP连接

推荐文章:TCP建立连接三次握手和释放连接4次握手

推荐文章:长连接与短连接

TCP短连接

client向server发起连接请求,server接到请求,然后双方建立连接。client向server 发送消息,server回应client,然后一次读写就完成了,这时候双方任何一个都可以发起close操作,不过一般都是client先发起 close操作。为什么呢,一般的server不会回复完client后立即关闭连接的,当然不排除有特殊的情况。从上面的描述看,短连接一般只会在 client/server间传递一次读写操作

短连接的优点是:管理起来比较简单,存在的连接都是有用的连接,不需要额外的控制手段

TCP长连接

client向server发起连接,server接受client连接,双方建立连接。Client与server完成一次读写之后,它们之间的连接并不会主动关闭,后续的读写操作会继续使用这个连接。

首先说一下TCP/IP详解上讲到的TCP保活功能,保活功能主要为服务器应用提供,服务器应用希望知道客户主机是否崩溃,从而可以代表客户使用资 源。如果客户已经消失,使得服务器上保留一个半开放的连接,而服务器又在等待来自客户端的数据,则服务器将应远等待客户端的数据,保活功能就是试图在服务 器端检测到这种半开放的连接。

如果一个给定的连接在两小时内没有任何的动作,则服务器就向客户发一个探测报文段,客户主机必须处于以下4个状态之一:

客户主机依然正常运行,并从服务器可达。客户的TCP响应正常,而服务器也知道对方是正常的,服务器在两小时后将保活定时器复位。

客户主机已经崩溃,并且关闭或者正在重新启动。在任何一种情况下,客户的TCP都没有响应。服务端将不能收到对探测的响应,并在75秒后超时。服务器总共发送10个这样的探测 ,每个间隔75秒。如果服务器没有收到一个响应,它就认为客户主机已经关闭并终止连接。

客户主机崩溃并已经重新启动。服务器将收到一个对其保活探测的响应,这个响应是一个复位,使得服务器终止这个连接。

客户机正常运行,但是服务器不可达,这种情况与2类似,TCP能发现的就是没有收到探查的响应。

从上面可以看出,TCP保活功能主要为探测长连接的存活状况,不过这里存在一个问题,存活功能的探测周期太长,还有就是它只是探测TCP连接的存活,属于比较斯文的做法,遇到恶意的连接时,保活功能就不够使了。

在长连接的应用场景下,client端一般不会主动关闭它们之间的连接,Client与server之间的连接如果一直不关闭的话,会存在一个问 题,随着客户端连接越来越多,server早晚有扛不住的时候,这时候server端需要采取一些策略,如关闭一些长时间没有读写事件发生的连接,这样可 以避免一些恶意连接导致server端服务受损;如果条件再允许就可以以客户端机器为颗粒度,限制每个客户端的最大长连接数,这样可以完全避免某个蛋疼的 客户端连累后端服务。

长连接和短连接的产生在于client和server采取的关闭策略,具体的应用场景采用具体的策略,没有十全十美的选择,只有合适的选择

4.HTTPS

定义:

HTTP over SSL 的简称,既工作在SSL(或TLS)上的HTTP,就是加密通信的HTTP。

工作原理:

在客户端与服务端之间协商出一套对称秘钥,每次发送消息之前都将内容加密,收到之后解密,达到内容的加密传输。

为什么不使用非对称加密:

考虑到网络通信的性能,非对称加密,运算复杂,会影响通信性能。

HTTPS 建立通信的过程:

1. Client Hello
2. Server Hello
3. 服务器器证书 信任建⽴立
4. Pre-master Secret
5. 客户端通知:将使⽤用加密通信 6. 客户端发送:Finished
7. 服务器器通知:将使⽤用加密通信 8\. 服务器器发送:Finished

推荐文章:[SSL/TLS协议运行机制的概述](http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html)

 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页