Jamstack架构的核心在于“APIs”(应用程序接口),它赋予静态网站强大的动态功能。通过APIs,开发者可以将复杂性转移,并为静态网站添加动态功能。访问API通常需要验证请求的真实性,这通常以身份验证(Auth)的形式出现,可以根据所使用的服务和要完成的任务在客户端或服务器端进行。
各种协议的差异导致API的身份验证实现各不相同。这些身份验证协议和实现细节在将API集成到Jamstack站点时增加了额外的挑战。幸运的是,这并非毫无章法。每种协议都可以映射到特定的用例,实现身份验证的关键在于理解这一点。
为了更好地说明这一点,让我们深入探讨各种协议及其最适合的场景。
协议概述
OAuth 2.0是当今身份验证遵循的通用标准。OAuth是一个相当灵活的授权框架,它包含一系列授权,定义了客户端和API端点之间的关系。在OAuth流程中,客户端应用程序向授权端点请求访问令牌,并使用该令牌为API端点签名请求。
主要有四种授权类型——授权码、隐式流程、资源所有者密码和客户端凭据。我们将分别研究每一种。
授权码授权
在所有OAuth授权类型中,授权码授权可能是最常见的。此授权流程主要用于在用户明确授予权限后获取访问令牌以授权API请求,它遵循两步过程:
- 首先,用户会被引导到同意屏幕(即授权服务器),在那里他们授予服务访问其个人帐户和数据的权限。
- 一旦获得权限,下一步就是从身份验证服务器检索访问令牌,然后可以使用该令牌对API端点的请求进行身份验证。
与其他授权类型相比,授权码授权通过增加请求用户明确授权的步骤,增加了额外的安全层。这种多步骤代码交换意味着访问令牌永远不会暴露,并且始终通过应用程序和授权服务器之间的安全后端通道发送。这样,攻击者就无法通过拦截请求轻松窃取访问令牌。谷歌拥有的服务(如Gmail和Google日历)利用此授权码流程来访问用户帐户中的个人内容。如果您想更深入地了解此工作流程,请查看此博文以了解更多信息。
隐式授权
隐式授权类似于授权码授权,但有一个明显的区别:它不是让用户授予权限以检索授权码,然后将其交换为访问令牌,而是通过重定向URL的片段(哈希)部分(即前通道)立即返回访问令牌。
由于减少了授权码步骤,隐式授权流程存在令牌暴露的风险。由于令牌直接嵌入到URL中(并记录到浏览器历史记录中),如果重定向被拦截,则很容易访问。
尽管存在漏洞,但隐式授权对于基于用户代理的客户端(如单页应用程序)很有用。由于客户端呈现的应用程序中可以轻松访问应用程序代码和存储,因此没有安全的方法来保护客户端密钥。隐式流程通过为应用程序提供一种快速简便的方式来在客户端对用户进行身份验证,从而成为解决此问题的逻辑方法。它也是解决CORS问题的有效方法,尤其是在使用不支持跨域请求的第三方授权服务器时。由于这种方法固有的令牌暴露风险,需要注意的是,隐式流程中的访问令牌往往是短暂的,并且永远不会发出刷新令牌。因此,此流程可能需要为每个对特权资源的请求登录。
资源所有者密码授权
在资源所有者密码授权的情况下,资源所有者将其用户名和密码凭据发送到授权服务器,然后授权服务器发送回带有可选刷新令牌的访问令牌。由于资源所有者凭据在客户端应用程序和授权服务器之间的授权交换中可见,因此资源所有者和客户端应用程序之间必须存在信任关系。尽管显然不如其他授权类型安全,但资源所有者密码授权为第一方客户端提供了极佳的用户体验。此授权流程最适合应用程序具有高度特权或在设备操作系统中工作的情况。当其他流程不可行时,此授权流程通常用于。
客户端凭据授权
客户端凭据授权类型主要用于客户端需要在用户上下文之外获取访问令牌时。当无法保证对受保护资源的每次访问都获得用户的明确许可时,这适用于机器到机器身份验证。CLI和在后端运行的服务是此授权类型派上用场的实例。它不依赖于用户登录,而是传递客户端ID和密钥以获取令牌,然后可以使用该令牌对API请求进行身份验证。
通常,在客户端凭据授权中,会建立一个服务帐户,应用程序通过该帐户运行并进行API调用。这样,用户不会直接参与,并且应用程序仍然可以继续对请求进行身份验证。此工作流程在应用程序想要访问其自身数据(例如分析)而不是特定用户数据的情况下相当常见。
结论
Jamstack站点依赖于第三方服务来实现复杂的功能,因此精心设计身份验证解决方案对于维护其安全性至关重要。作为Jamstack中交换数据的主要方式,API是其中很大一部分。我们研究了四种不同的API请求身份验证方法,每种方法都有其自身的优势和对用户体验的影响。
我们在开头提到,这四种是用于从API请求数据的主要身份验证形式。还有许多其他类型,在oauth.net上有很好的概述。该网站作为一个整体,不仅对可用的身份验证类型进行了深入探讨,而且对整个OAuth框架进行了深入探讨。
您是否更喜欢一种方法而不是另一种方法?您是否有您可以指出的使用示例?请在评论中分享!
以上是jamstack上的API和身份验证的详细内容。更多信息请关注PHP中文网其他相关文章!

在这篇文章中,布莱克·莫里(Blackle Mori)向您展示了一些骇客,同时试图推动同位HTML支持的极限。如果您敢于使用这些,以免您也被标记为CSS罪犯。

具有CSS的自定义光标很棒,但是我们可以将JavaScript提升到一个新的水平。使用JavaScript,我们可以在光标状态之间过渡,将动态文本放置在光标中,应用复杂的动画并应用过滤器。

互动CSS动画和元素相互启动的元素在2025年似乎更合理。虽然不需要在CSS中实施乒乓球,但CSS的灵活性和力量的增加,可以怀疑Lee&Aver Lee&Aver Lee有一天将是一场

有关利用CSS背景滤波器属性来样式用户界面的提示和技巧。您将学习如何在多个元素之间进行背景过滤器,并将它们与其他CSS图形效果集成在一起以创建精心设计的设计。

好吧,事实证明,SVG的内置动画功能从未按计划进行弃用。当然,CSS和JavaScript具有承载负载的能力,但是很高兴知道Smil并没有像以前那样死在水中

是的,让#039;跳上文字包装:Safari Technology Preview In Pretty Landing!但是请注意,它与在铬浏览器中的工作方式不同。

此CSS-tricks更新了,重点介绍了年鉴,最近的播客出现,新的CSS计数器指南以及增加了几位新作者,这些新作者贡献了有价值的内容。

在大多数情况下,人们展示了@Apply的@Apply功能,其中包括Tailwind的单个property实用程序之一(会改变单个CSS声明)。当以这种方式展示时,@Apply听起来似乎很有希望。如此明显


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SublimeText3汉化版
中文版,非常好用

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

WebStorm Mac版
好用的JavaScript开发工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。