Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >浅谈 REST API 身份验证的四种方法

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

原创
作者头像
网络技术联盟站
发布于 2022-06-16 10:26:18
发布于 2022-06-16 10:26:18
2.7K0
举报

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

让我们直接开始!

TOC

什么是认证和授权?

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

认证

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

鉴权

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

认证和鉴权对比

  • 认证:检查你的身份
  • 鉴权:检查你是否有权限做某些事

1、HTTP 认证

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

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

  • 基本认证
  • 令牌认证

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

基本认证

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

代码语言:txt
AI代码解释
复制
Authorization: Basic fasgfkaskjg8798f=

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

2、令牌认证

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

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

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

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

令牌认证举例:

代码语言:txt
AI代码解释
复制
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 举例
代码语言:txt
AI代码解释
复制
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的升级,现在也慢慢流行起来!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
聊聊统一认证中的四种安全认证协议(干货分享)
   在开发的过程中,常常听说认证(Authentication)和授权(Authorization),它们的缩写都为auth,所以非常容易混淆。
陈哈哈
2023/11/01
3.8K0
聊聊统一认证中的四种安全认证协议(干货分享)
客官,来看看AspNetCore的身份验证吧
本文附带了普通Bearer JwtToken验证和微信小程序验证登录的源代码,效果图您可以参考下方的Gif图片。
句幽
2020/07/01
1.5K0
客官,来看看AspNetCore的身份验证吧
细说API - 认证、授权和凭证
遗憾的是依然有大量候选人答非所问,无法搞清楚 cookie 和 session 之间的区别。而在工作中也有让人惊讶的真实案例:把 user ID 存储到 local storage 中当做 token 使用,原因是他们声称弃用了 cookie 这种落后的东西;一个移动端项目,服务器给出的 API 中需要客户端模拟一个 cookie,从而像浏览器中 ajax 那样消费 API。
ThoughtWorks
2019/05/05
3.1K0
细说API - 认证、授权和凭证
五分钟入门OAuth2.0与OIDC
OAuth2.0是一种用于访问授权的行业标准协议,OAuth2.0用于为互联网用户提供将其在某个网站的信息授权给其他第三方应用、网站访问,但是不需要将网站的账号密码给第三方应用、网站。
windealli
2022/11/14
4K0
五分钟入门OAuth2.0与OIDC
聊聊统一身份认证服务
当企业的应用系统逐渐增多后,每个系统单独管理各自的用户数据容易形成信息孤岛,分散的用户管理模式阻碍了企业应用向平台化演进。当企业的业务发展到一定规模,构建统一的标准化账户管理体系将是必不可少的,因为它是企业云平台的重要基础设施,能够为平台带来统一的帐号管理、身份认证、用户授权等基础能力,为企业带来诸如跨系统单点登录、第三方授权登录等基础能力,为构建开放平台和业务生态提供了必要条件。
我思故我在
2020/02/14
5.4K0
聊聊统一身份认证服务
云调用,小程序鉴权正确姿势
互联网的应用,大大小小,不同场景,都离不开鉴权,从简单的可被用户感知的登陆鉴权,到技术侧不被感知的各种技术参数鉴权,都有着形形色色的鉴权方式和表现形式。
腾讯云开发TCB
2019/04/12
2.6K0
云调用,小程序鉴权正确姿势
深入解析 MQTT 中基于 Token 的认证和 OAuth 2.0
具体而言,我们将深入了解基于 Token 的认证和 OAuth 2.0,阐述它们的原理并展示它们在 MQTT 中的应用。
EMQ映云科技
2023/07/13
7360
深入解析 MQTT 中基于 Token 的认证和 OAuth 2.0
身份即服务背后的基石
近期所在部门基本完成了 IDaaS(身份即服务) 系统的改造,故将所涉及到的知识点总结成本文。
gopher云原生
2021/11/26
3K0
身份即服务背后的基石
认证鉴权也可以如此简单—使用API网关保护你的API安全
随着企业数字化进程的发展,企业正在大量使用 API 来连接服务和传输数据,API 在带来巨大便利的同时也带来了新的安全问题,被攻击的 API 可能导致重要数据泄漏并对企业业务造成毁灭性影响。因此,API 安全正受到业界和学术界的广泛关注。
克莱尔小熊
2021/12/26
10.7K2
认证鉴权也可以如此简单—使用API网关保护你的API安全
【Spring底层原理高级进阶】【SpringCloud整合Spring Security OAuth2】深入了解 Spring Security OAuth2:底层解析+使用方法+实战
OAuth2(Open Authorization 2.0)是一种用于授权的开放标准协议,用于通过第三方应用程序访问用户在某个服务提供商上存储的资源,而无需共享用户的凭证(例如用户名和密码)。它允许用户授权给第三方应用程序访问受保护的资源,同时确保用户的凭证信息不被直接暴露给第三方应用程序。
苏泽
2024/03/01
2.6K0
【Spring底层原理高级进阶】【SpringCloud整合Spring Security OAuth2】深入了解 Spring Security OAuth2:底层解析+使用方法+实战
Identity Server 4 - Hybrid Flow - MVC客户端身份验证
预备知识 可能需要看一点点预备知识 OAuth 2.0 不完全简介: https://www.cnblogs.com/cgzl/p/9221488.html OpenID Connect 不完全简介:
solenovex
2018/07/05
2.8K0
asp.net core IdentityServer4 概述
通常,每一层(前端,中间层和后端)都必须保护资源并实施身份验证和/或授权-经常针对同一用户存储。
HueiFeng
2020/02/12
1.3K0
asp.net core IdentityServer4 概述
OAuth 2.0身份验证
浏览网络时,几乎可以肯定您会遇到一些使您可以使用社交媒体帐户登录的网站,该功能很可能是使用流行的OAuth 2.0框架构建的,OAuth 2.0对于攻击者来说非常有趣,因为它非常常见,而且天生就容易出现实现错误,这可能导致许多漏洞,从而使攻击者可以获得敏感用户数据,并有可能绕过身份验证。
Al1ex
2021/04/22
3.6K0
OAuth 2.0身份验证
微服务架构下的统一身份认证和授权
本文讨论基于微服务架构下的身份认证和用户授权的技术方案,在阅读之前,最好先熟悉并理解以下几个知识点:
matinal
2020/11/27
4K0
微服务架构下的统一身份认证和授权
OAuth 详解<1> 什么是 OAuth?
从高层次开始,OAuth 不是API或服务:它是授权的开放标准,任何人都可以实施它。
用户1418987
2023/04/10
4.7K0
OAuth 详解<1> 什么是 OAuth?
HTTP 安全通信保障:TLS、身份验证、授权
对于交易支付相关的网络服务,需要保障安全、私密的网络通信。此时需要依赖 TLS 、身份验证和授权机制。我们先来了解基本概念。
小草学习屋
2023/11/22
7680
HTTP 安全通信保障:TLS、身份验证、授权
ASP.NET Core的身份认证框架IdentityServer4(9)-使用OpenID Connect添加用户认证
OpenID Connect OpenID Connect 1.0是OAuth 2.0协议之上的一个简单的身份层。 它允许客户端基于授权服务器执行的身份验证来验证最终用户的身份,以及以可互操作和类似R
晓晨
2018/06/22
3.5K0
【 .NET Core 3.0 】框架之五 || JWT权限验证
这里一共三个文章,目前是第一篇,剩下两篇主要是在博客园,大家点击阅读原文,自行查看就行。
老张的哲学
2022/04/10
2.2K0
【 .NET Core 3.0 】框架之五 || JWT权限验证
登录工程:现代Web应用中的身份验证技术|洞见
“登录工程”的前两篇文章分别介绍了《传统Web应用中的身份验证技术》,以及《现代Web应用中的典型身份验证需求》,接下来是时候介绍适应于现代Web应用中的身份验证实践了。 登录系统 首先,我们要为“登录”做一个简要的定义,令后续的讲述更准确。之前的两篇文章有意无意地混淆了“登录”与“身份验证”的说法,因为在本篇之前,不少“传统Web应用”都将对身份的识别看作整个登录的过程,很少出现像企业应用环境中那样复杂的情景和需求。但从之前的文章中我们看到,现代Web应用对身份验证相关的需求已经向复杂化发展了。我们有
ThoughtWorks
2018/04/17
1.8K0
登录工程:现代Web应用中的身份验证技术|洞见
微服务架构下的安全认证与鉴权
本文目录: 一、单体应用 VS 微服务 二、微服务常见安全认证方案 三、JWT介绍 四、OAuth 2.0 介绍 五、思考总结 从单体应用架构到分布式应用架构再到微服务架构,应用的安全访问在不断的经受考验。为了适应架构的变化、需求的变化,身份认证与鉴权方案也在不断的变革。面对数十个甚至上百个微服务之间的调用,如何保证高效安全的身份认证?面对外部的服务访问,该如何提供细粒度的鉴权方案?本文将会为大家阐述微服务架构下的安全认证与鉴权方案。 一、单体应用 VS 微服务 随着微服务架构的兴起,传统的单体应用场景下
yuanyi928
2018/03/30
3.6K0
微服务架构下的安全认证与鉴权
推荐阅读
相关推荐
聊聊统一认证中的四种安全认证协议(干货分享)
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档