第三方登陆主要是基于author协议来实现,下面简单说下实现流程:
1、首先我们需要以开发者的身份向第三方登陆平台申请接入应用,
申请成功后,我们会获得一个appID和一个secrectID.
2、当我们的网站需接入第三方登陆时,会引导用户跳转到第三方的登陆授权页面,
此时把之前申请的appID和secrectID带给登陆授权页面。
3、用户登陆成功后即得到授权,第三方会返回一个临时的code给我们的网站。
4、我们的网站接受到code后,再次向我们的第三方发起请求,
并携带接收的code,从第三方获取access_token.
5、第三方处理请求后,会返回一个access_token给我们的网站,
我们的网站获取到access_token后就可以调用第三方提供的接口了,比如获取用户信息等。
最后把该用户信息存入到我们站点的数据库,并把信息保存到session中,实现用户的第三方登陆。
1、三次握手:
•1)第一次:客户端发送SYN = 1,seq = client_isn
◦作用:客户端:无,服务端:确认自己的接收功能和客户端的发送功能
•2)第二次:服务端发送SYN = 1,seq = server_isn,ACK =client_isn +1
◦作用:客户端:确认自己发送和接收都正常,确认服务端的接收和发送正常,服务端:确认自己的接收正常,确认服务端的发送正常(这时候服务端还不能确认客户端接收是否正常)
•3)第三次:客户端发送SYN = 0, ACK = server_isn+1,seq =client_isn+1
◦作用:双方确认互相的接收和发送正常,建立连接
2、四次挥手
•1)第一次:客户端发送FIN
◦作用:告诉服务端我没有数据发送了(但是还能接收数据)
•2)第二次:服务端发送ACK
◦作用:告诉客户端收到请求了,可能服务端还有数据需要发送,所以客户端收到进入FIN_WAIT状态,等服务端数据传输完之后发送FIN
•3)第三次:服务端发送FIN
◦作用:服务端告诉客户端我发送完了,可以关闭连接了。
•4)第四次:客户端发送ACK
◦作用:客户端收到FIN之后,担心服务端不知道要关闭,所以发送一个ACK,进入TIME_WAIT,等待2MSL之后如果没有收到回复,证明服务端已经关闭了,这时候客户端也关闭连接。
注意:
•当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据
•最后需要等待2MSL是因为网络是不可靠的,如果服务端没有收到最后一次ACK,服务端会重新放FIN包然后等客户端再次发送ACK包然后关闭(所以客户端最后发送ACK之后不能立即关闭连接)