签名和鉴权,怎么来保证接口API的安全

3,258 阅读3分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动

开始接触项目之后,尤其是在项目比较复杂需要多系统之间支持是,会经常听到或用到系统接口的签名、鉴权等内容,这次我们就来一步一步学习Web 接口API的鉴权相关知识。

1. 什么是鉴权

鉴权(authentication),也叫做认证,即验证用户是否拥有访问系统的权利,传统的鉴权方式是通过账号和密码实现的,即用户通过正确的账户和密码登录成功便完成了鉴权。

随着系统功能的丰富,用户种类的增加,仅仅通过登录来实现鉴权的方式已经不能满足要求了,这种鉴权比较简单,对用户的控制粒度也比较大,不能满足精细划分的目的。

2. 鉴权的分类

根据鉴权的作用不同,可以将鉴权分为:

  • 用户鉴权:也可以叫做应用鉴权,是指在用户访问应用时进行的验证,防止非法用户访问系统资源,即常见的登录认证
  • 网络鉴权:除了对用户身份进行认证,还可以对访问用户的网络进行鉴权,以此防止用户接入非法网络后访问资源,造成数据泄露
  • 接口鉴权:接口鉴权是一种更细粒度的鉴权方式,用户通过用户鉴权后登录到应用中,之后对于用户请求的具体接口路径,还可以根据用户拥有的实际权限进行验证和过滤,如果鉴权失败则不可访问路径

3. 鉴权可以用来做什么

通过系统的鉴权功能,可以实现的内容有:

  1. 实现用户登录的功能,登录后通过获取用户对应的信息,知道当前用户是谁,属于什么角色,有什么权限
  2. 用户完成系统的登录后需要存储登录状态,否则每次请求都要重新登录,体验太差,通过保存鉴权信息就可以实现一定时间的自动登录,轻松访问系统资源
  3. 对于系统中不同角色的用户,还可以通过鉴权的方式验证用户拥有的权限,控制系统返回数据,这样用户就只能看到拥有权限的资源信息,保护资源的隐秘性

4. 接口鉴权的必要性

由于Web API接口是公开访问的,如果将API不加限制的暴露出来,会给整个服务带来极大的风险

  • 无数的访问造成服务器压力过大而不能正常响应,导致服务瘫痪
  • 访问用户不加限制,资源有泄漏风险

5. 常见的接口鉴权方式

了解了接口鉴权的重要性,下面就看以下有哪些方法可以实现接口鉴权

image.png

  • Session/Cookie鉴权:浏览器和服务器存储会话的形式,传统的企业应用有所使用
  • Token或JWT鉴权:令牌发放的形式,在当下前后端分离系统中广泛使用
  • OAuth鉴权:即开放授权,作为一种开放标准,多用于第三方应用登录时的鉴权
  • AK/SK鉴权:服务端之间通信的鉴权方式,通常使用密钥加密

6. 总结

本篇文章作为接口鉴权学习的开始,主要学习了鉴权的定义、分类、功能作用以及实现方式,接下来的学习中会对鉴权的方式逐一介绍,敬请期待。