Scroll
认证、安全与性能
Drupal JSON:API 模块提供了一种强大的方式将您的内容作为 API 暴露出来,但选择正确的认证方法对于安全性和可用性至关重要。本文回顾了在使用 Drupal 的 JSON 模块时可用的各种认证选项。
核心认证方法
Drupal REST & JSON API Authentication 模块 使用不同的认证方式限制和保护对您的 Drupal 网站 API 的未授权访问,包括:
该模块还允许您在 Headless/解耦 Drupal 设置中验证 API 调用。
- 基本认证(Basic Authentication)
- 基于 API Key 的认证
- 基于访问令牌/OAuth 的认证
- 基于 JWT 令牌的认证
- 第三方提供商令牌认证
基于 Cookie 的认证
Drupal 的默认认证方式使用会话 Cookie。当用户通过 Drupal 的登录表单登录时,会创建一个会话 Cookie,可用于验证 JSON
请求。
优点:
- 对基于浏览器的应用程序实现简单
- 使用 Drupal 现有的认证系统
- 适用于托管在同一域上的 JavaScript 应用程序
限制:
- 在没有额外配置的情况下不适用于跨域请求
- 对移动应用或第三方集成不太理想
- 会话管理开销
基本认证(Basic Authentication)
基本认证涉及在每个请求的 Authorization 头中发送凭据(用户名和密码)。
优点:
- 实现简单
- 在 HTTP 客户端中广泛支持
限制:
- 每个请求都会发送凭据
- 仅在 HTTPS 下安全
- 没有内置的令牌过期机制
贡献的认证模块
Simple OAuth (OAuth 2.0)
Simple OAuth 为 Drupal 的 API 认证实现了 OAuth 2.0 协议。
优点:
- 安全的基于令牌的认证
- 支持刷新令牌
- 细粒度的权限范围
- 非常适合第三方集成
- 被广泛采用的标准
限制:
- 与基本认证相比设置更复杂
- 需要对 OAuth 2.0 流程有正确的理解
JWT (JSON Web Token)
JWT 模块允许使用 JSON Web Tokens 进行认证。
优点:
- 无状态认证
- 减少验证时的数据库查询
- 可在令牌中包含声明/元数据
- 在大规模下具有良好的性能
限制:
- 需要正确的密钥管理
- 若实现不当存在安全隐患
- 没有内置的令牌撤销机制(需要额外措施)
Key Auth
Key Auth 为 Drupal 提供了 API Key 认证。
优点:
- 简单的 API Key 方式
- 适用于机器与机器之间的通信
- 所需配置最少
限制:
- 对于以用户为中心的应用程序来说不如 OAuth 安全
- 撤销选项有限
- 没有刷新令牌机制
Consumer Auth
Consumer Auth 扩展了 Drupal API 系统中 Consumer 实体的功能。
优点:
- 与 Drupal 的 consumer 系统集成
- 灵活的基于 consumer 的权限
- 可补充其他认证方法
限制:
- 需要与其他认证方法一起使用
- 不是独立的解决方案
选择认证方法时的考虑因素
在为您的 JSON 选择认证方法时,请考虑:
- 安全性要求:您的数据有多敏感?
- 客户端类型:基于浏览器、移动应用还是服务器到服务器?
- 用户体验:用户是否需要频繁登录?
- 性能需求:认证速度有多重要?
- 集成需求:第三方服务是否会访问您的 API?
最佳实践
- 始终在任何认证方法中使用 HTTPS
- 为基于浏览器的应用程序实现适当的 CORS 头
- 仔细考虑令牌过期策略
- 在适当情况下使用刷新令牌
- 实施速率限制以防止暴力破解攻击
- 记录认证尝试以进行安全监控