How to Implement API Key Authentication in Rails Without Devise
a day ago
- Devise 对于 API 认证来说过于繁琐;Rails 提供了 `has_secure_password` 和 HTTP 认证方法等内置工具。
- 创建带有 `has_secure_password` 的 User 模型,以及通过多态关联支持多种 Bearer 类型的 ApiKey 模型。
- 使用 `ActionController::HttpAuthentication::Token::ControllerMethods` 进行基于令牌的认证,而 `Basic` 则用于登录。
- 实现端点:POST /api-keys(使用 Basic 认证登录)、GET /api-keys(使用令牌认证列出密钥)、DELETE /api-keys/:id(使用令牌认证撤销密钥)。
- 存储令牌摘要(HMAC-SHA256)而不是明文令牌,以防止时序攻击和信息泄露。
- 使用 `before_create` 生成 HMAC 摘要,并设置虚拟属性 `token` 仅用于创建后响应。
- 整个解决方案需要不到 100 行应用程序代码(不包括迁移)。