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

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
方法,以满足具体需求。例如,如果我们希望 GET
请求是公共的,而 POST
请求需要验证,可以这样实现:
// 示例代码
如果请求是GET到Home,则不应用Api-Key验证
以下是一个实际案例,展示如何在项目中应用上述方法:
项目是一个基于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