浅谈 REST API 身份验证的四种方法

简介: 在平时开发中,接口验证是必须的,不然所有人都能请求你的接口,会带来严重的后果,接口验证一般有四种方法

在平时开发中,接口验证是必须的,不然所有人都能请求你的接口,会带来严重的后果,接口验证一般有四种方法:

让我们直接开始!

[TOC]

什么是认证和授权?

在开始谈接口验证前,我们有必要先了解一下认证和授权。

认证

认证,简单来说就是验明身份,就像我们的身份证一样,警察在查户口的时候会看一下我们的身份证,证明“你确实是你”。

鉴权

鉴权,简单来说就是看你是否有权限做某些事。就像你在公司一样,有些代码仓库你是没有权限写的,只有读的权限。

认证和鉴权对比

  • 认证:检查你的身份

  • 鉴权:检查你是否有权限做某些事

1、HTTP 认证

HTTP身份认证方案一共有10种,分别是:

目前最常用的就是前两种:

  • 基本认证
  • 令牌认证

下面我们简单介绍一下这两种认证:

基本认证

基本认证,顾名思义,是一种非常基本的认证方式,它是直接把密码放在了请求头中了,比如:

Authorization: Basic fasgfkaskjg8798f=

一般来说会将用户名和密码进行编码,不过即使经过编码,也不安全,稍微专业的人猜猜就知道用啥编码方式了,然后解码一下,基本上就跟明文没有啥区别。

2、令牌认证

令牌认证,就是准确的说应该是“Bearer authentication”,Bearer意思就是承载的意思,那么令牌认证可以理解为承载有权访问某资源的令牌。

这个令牌你就当做是古代的城池令牌,比如你是一个战士,你想调用兵力,必须持有某某令牌,每个令牌的权利范围不一样,令牌由朝廷统一发放。

在这里我们可以看出令牌认证有以下特点:

  • 令牌的权限可控(不同令牌调用的兵力数量不一样)
  • 令牌由服务端生成(朝廷)

令牌认证举例:

Authorization: Bearer WmLkiNzaZuR5aas4m+FE429wWpo=

其中WmLkiNzaZuR5aas4m+FE429wWpo=就是token。

3、API密钥认证

api密钥认证使用率非常高,而且也非常灵活,我们先来看一下API密钥认证是如何工作的:

如图:

  1. 客户端先去向授权服务器请求到API KEY
  2. 生成后的KEY可以入库记录
  3. 客户端访问API服务的带上API KEY
此API KEY 由数字和字母组成,一般至少 30 个字符长
API KEY 举例
Authorization: Apikey fa34sfs32wrwr3432wfa3532tfsaf3f

API KEY使用的时候完全取决于开发者,可以存放在header、body甚至查询参数中,总而言之使用非常简单。

API KEY缺点

API KEY实际意义上并不是授权,有人还是可以获取 API 密钥并获得对他们可用的所有信息的访问权限,就像使用 HTTP 基本身份验证一样,API 密钥只是消除了攻击者猜测进入系统的方式的能力,但是,如果有一个不安全的服务器并且攻击者能够获得一些 API 密钥,那么安全性就不复存在。

3、OAuth (2.0)

OAuth,英文全称:Open Authentication,,中文意思就是开放式身份验证

我们先来看一下OAuth的工作原理:

如图:

  1. 客户端向资源服务器请求授权,这个时候通常就是以用户名和密码进行登录
  2. 授权通过后,资源服务器同意客户端授权许可
  3. 客户端拿着资源服务器授权许可去认证服务器申请令牌
  4. 认证服务器验证授权通过后给客户端生成令牌
  5. 客户端拿着令牌请求资源服务器
  6. 资源服务器验证令牌的有效时间
  7. 验证令牌无误且有效后,向客户端返回其请求的资源
令牌通常具有有限的范围(意味着用户可以对其进行身份验证的系统数量有限)和有效期(意味着令牌在一定时间后过期)

4、OpenID Connect

OpenID Connect,英文缩写:OIDC,是一个 OpenID 基金会 (OIDF) 标准,它是基于 OAuth 2.0 框架之上的身份验证协议,允许在用户尝试访问受保护的 HTTPs 端点时验证用户身份。

OpenID Connect 支持所有类型的客户端,包括基于 Web 的客户端、移动客户端和 JavaScript 客户端。

为啥会出现OpenID Connect?

最大的原因就是OAuth 2.0 本质上是一种授权协议,试想一下这样的场景:有多个资源服务器,你从一个资源服务器上得到授权并且拿到token,你就可以用这个token去访问跟此资源服务器授权类型的网站,这种就是极其不安全的,这就是跨站点访问密码。

这个是啥意思呢?

因为OAuth 2.0是跟用户信息绑定的,认证服务器在验证完授权服务器的信息无误后就会生成一个跟用户信息相关的token,这个token包含了相应的访问范围,这个可以看OAuth (2.0)画的那张图。

举个最简单的生活例子,比如有个军事重地,需要刷卡才能进,那么想要进去,肯定想到先去办张有进入权限的卡,这个卡是跟某某将军的身份证绑定,你通过某种手段拿到了将军的身份证,办理人员只认身份证,身份证无误,给你办了这张卡,你大摇大摆的拿着这张卡进入到军事基地开始谋划大事。

这个就是OAuth 2.0最大的问题:为啥在刷卡进入的时候不验证一下,你到底是不是那个将军?

所以OpenID Connect出现了!

至于OpenID Connect工作原理,本文暂时不做展开,内容太多了,如果大家有需要,可以在评论区告诉我,我视人数看是否值得一写,这块还是蛮难的。

总结

本文介绍了四种rest api身份验证方法:

  • HTTP认证
  • 令牌认证
  • OAuth 2.0认证
  • OpenID Connect认证

最不安全的就是HTTP认证中的基本认证,常用一般是令牌认证、OAuth 2.0认证,其中最大的赢家还是OAuth 2.0认证,实现起来比较快速、容易,而且扩展性比较强。OpenID Connect认证最为可靠,是OAuth 2.0的升级,现在也慢慢流行起来!

目录
相关文章
|
3月前
|
测试技术 API 项目管理
API测试方法
【10月更文挑战第18天】API测试方法
70 1
|
1月前
|
JSON 安全 API
Python调用API接口的方法
Python调用API接口的方法
191 5
|
2月前
|
缓存 API 网络架构
掌握现代API开发:GraphQL vs REST
【10月更文挑战第24天】本文深入探讨了现代API开发中两种主流技术——GraphQL和REST的设计理念、技术特点及实际开发中的对比分析。GraphQL通过声明式数据请求和强类型系统提供更高的灵活性和性能,而REST则以其无状态特性和成熟的生态系统见长。文章还讨论了两者在客户端-服务器交互、安全性和工具支持方面的优劣,帮助开发者根据项目需求做出明智选择。
|
3月前
|
Java 大数据 API
别死脑筋,赶紧学起来!Java之Steam() API 常用方法使用,让开发简单起来!
分享Java Stream API的常用方法,让开发更简单。涵盖filter、map、sorted等操作,提高代码效率与可读性。关注公众号,了解更多技术内容。
122 5
|
3月前
|
JavaScript 前端开发 Java
多种语言请求API接口方法
每种语言和库的选择取决于具体需求、项目环境以及个人偏好。了解这些基本方法,开发者就可以根据项目需求选择合适的语言和库来高效地与API交互。
54 1
|
3月前
|
安全 测试技术 API
一图看懂API测试9种方法
一图看懂API测试九种方法:冒烟测试验证基本功能,功能测试确保符合规格,集成测试检查组件协同工作,回归测试防止新变更引入问题,负载测试评估性能稳定性,压力测试挑战极限负载,安全测试发现并修复漏洞,用户界面测试确保UI与API协调,模糊测试提升异常数据处理鲁棒性。
|
4月前
|
JSON 中间件 API
开发REST API3-11
开发REST API3-11
|
4月前
|
JSON JavaScript API
编写REST API
编写REST API
76 2
|
3月前
|
Java API Maven
使用 Smart-doc 记录 Spring REST API
使用 Smart-doc 记录 Spring REST API
69 0
|
物联网 Linux API
玩 High API 系列之:快速实现身份验证
很多APP都需要具备一个基本功能,就是对用户身份进行验证,例如对用户和身份证信息和银行卡信息进行校验。对于中小企业而言,且不说相关软件开发的巨大工作量,身份证和银行卡数据的获取就是很大的一个问题。中小企业可能需要小半年时间才能完成这个身份验证的功能。
3717 0