如何在REST请求中添加Api-Key验证
在REST请求中实现Api-Key验证的最佳实践
在开发Web应用程序时,确保实现Api-Key验证。为了简化管理,我采用了一种集中化的方式来实现这一功能。本文将向您详细介绍如何以通用或非通用的方式,将Api-Key验证集成到Web应用程序的所有端点中。
添加Api-Key参数
首先,我在一个名为 ApiKey 的类中新增了一个参数,并将其初始化为空值。这个参数将用于存储我们的Api-Key。
修改OnPreDispatch方法
接下来,我对 OnPreDispatch 方法进行了修改。该方法会在处理请求之前被调用,是添加Api-Key验证的理想位置。在这里,我新增了一段代码,用于调用一个名为 ValidateApiKey 的方法。

实现ValidateApiKey方法
ValidateApiKey 方法是验证Api-Key的核心逻辑。以下是其实现的关键步骤:
-
检查是否需要验证
首先,通过调用
MustCheckApiKey方法,判断当前请求是否需要验证Api-Key。例如,对于某些公共API端点,我们可能不需要进行验证。 -
获取请求信息
方法接收两个参数:
pUrl:请求的地址,例如/api/resource。pMethod:请求的HTTP方法,如GET、POST、PUT等。
根据这些信息,我们可以灵活地决定是否应用Api-Key验证。
-
验证Api-Key
如果需要验证,则检查类中
ApiKey参数的值是否与请求头中的api-key属性值匹配。如果匹配,则允许请求通过;否则返回401 Unauthorized错误。
自定义MustCheckApiKey方法
在扩展类中,我们可以重写 MustCheckApiKey 方法,以满足具体需求。例如,如果我们希望 GET 请求是公共的,而 POST 请求需要验证,可以这样实现:
// 示例代码
如果请求是GET到Home,则不应用Api-Key验证
实际案例:保护URL生成端点
以下是一个实际案例,展示如何在项目中应用上述方法:
项目是一个基于IRIS Docker的URL缩短器。在该项目中,我们希望保护短URL生成端点(POST 请求),但允许用户无需验证即可访问缩短的链接(GET 请求)。
-
扩展Base类
确保我们的类继承自
Base.cls类。例如:
AQS.urlShopener类.UrlREST扩展了urlShortener.REST.Base
-
设置ApiKey参数
重写
ApiKey参数的值,例如:
参数ApiKey="myRandomApiKeyValue"
-
重写MustCheckApiKey方法
根据需求,定义哪些请求需要验证。例如:
如果是POST请求,则需要验证Api-Key;如果是GET请求,则无需验证。
请求验证示例
以下是一些请求验证的截图,展示了正确和错误的Api-Key验证结果:
-
正确的Api-Key

-
错误或缺失的Api-Key

-
无需Api-Key的GET请求

结语
通过上述方法,我们可以灵活地为Web应用程序的不同端点实现Api-Key验证,从而提升系统的安全性。我希望本文的内容能对您的项目有所帮助。
现在,让我们享受新实现的安全功能吧!  .png)
原文链接: https://community.intersystems.com/post/how-add-api-key-validation-rest-requests
最新文章
- 社交媒体应用中的api集成:关键角色与功能
- 如何获取心知天气开放平台 API Key 密钥(分步指南)
- 什么是 LangGraph?
- API 速率限制策略:流控算法、实现原理与实战方案
- NFC支付是什么?如何改变我们的支付方式
- AI零门槛变现秘籍:最新赚钱公式全公开
- Postman API 测试全面指南(附测试示例)
- OpenAI GPT-4o 图像生成 (gpt-image-1) API – IMG.LY
- 如何使用 OpenAI 的 Sora API:综合使用指南
- 如何使用 amazon scraper api 进行商品数据采集
- 推荐一款支持加入数据库的AI项目:让你的数据库秒变AI数据库!
- 什么是 API Key 密钥以及如何使用它们?