第三方登陆主要是基于author协议来实现,下面简单说下实现流程:
1、首先我们需要以开发者的身份向第三方登陆平台申请接入应用,
申请成功后,我们会获得一个appID和一个secrectID.
2、当我们的网站需接入第三方登陆时,会引导用户跳转到第三方的登陆授权页面,
此时把之前申请的appID和secrectID带给登陆授权页面。
3、用户登陆成功后即得到授权,第三方会返回一个临时的code给我们的网站。
4、我们的网站接受到code后,再次向我们的第三方发起请求,
并携带接收的code,从第三方获取access_token.
5、第三方处理请求后,会返回一个access_token给我们的网站,
我们的网站获取到access_token后就可以调用第三方提供的接口了,比如获取用户信息等。
最后把该用户信息存入到我们站点的数据库,并把信息保存到session中,实现用户的第三方登陆。
1. token校验
登录后生成token,客户端中将token存储cookie中,服务器端将token存储与session中。后续的接口请求必须带上token,当和服务器一致则认为请求安全。
常用于客户端和服务器端的安全校验。
2. 服务器之间的sign签名校验
A服务器中用一个 key(私钥) + 时间戳 通过算法生成一个公钥,将时间戳和公钥传递给服务器B。服务器B通过同样的私钥和时间戳来生成一个公钥。如果两个公钥相同,则签名通过。
用于服务器和服务器之前的签名认证。比如支付宝,微信等接口签名下发。
3. 验证码
当部分接口可能涉及到大量的请求来攻击的时候。比如登录,注册等包含提交信息的。需要先验证验证码,当验证码通过后才会处理后续逻辑。
缺点是,每次都要输入验证码,影响用户体验。可以通过某段时间范围内,用户请求量是否超过某个阈值,当超过某个阈值后,才会出现输入验证码,否则不会出现验证码。
4. 接口请求频次限制
部分接口可能涉及到用户大量频繁的提交,但是当超过某个频次后,我们可能认为他是恶意攻击。比如聊天室,搜索接口,翻译等接口。
当某个ip或者token对接口在时间范围内有大量请求的时候,应该将该用户的ip限制,接口返回429。
5. 正确使用post,get请求方式。涉及有安全数据的,应该用post来提交。
6. 接口返回中应该将不需要的数据过滤。比如获取某个用户信息接口,如果只要用户名,就返回用户名。不要将该用户的用户名,密码,住址等私密信息返回,以便于造成泄露。
7. 使用https
8. 定时的分析接口请求日志或者nginx日志,确认是否有非法的访问,防患于未然。 你会经常发现,请求中包含各种路径,甚至包含sql语句的。根据这种请求分析自己的系统中是否存在漏洞
使用HTTP的POST方式,对固定参数+附加参数进行数字签名,使用的是md5加密。
比如:我想通过标题获取一个信息,在客户端使用 信息标题+日期+双方约定好的一个key通过md5加密生成一个签名(sign)。
然后作为参数传递到服务器端,服务器端使用同样的方法进行校验,如何接受过来的sign和我们通过算法算的值相同,证明是一个正常的接口请求,我们才会返回相应的接口数据。