如何对AEM API进行身份认证?仅允许移动应用调用的防护方案
AEM API身份认证与防护方案
针对你用AEM作为内容服务给移动应用提供JSON API的场景,以下是几种可行的防护方式,确保仅允许合法移动应用调用:
1. API密钥认证
给你的移动应用分配唯一的API密钥,在AEM中实现一个自定义OSGI过滤器,拦截目标API路径(/content/we-retail/us/en/products/women/shirts/jcr:content/root/content-tile.model.json及同类型路径)的请求,检查请求头中携带的X-API-Key是否与AEM中存储的合法密钥匹配。
- 实现要点:
- 在AEM的OSGI配置项中存储密钥,方便后续更新
- 编写
javax.servlet.Filter实现类,对指定路径的请求做密钥校验 - 校验失败时直接返回
401 Unauthorized响应
2. OAuth 2.0客户端凭据模式
适合服务对服务的认证场景,移动应用作为客户端,通过AEM集成的OAuth 2.0服务获取访问令牌:
- 步骤:
- 在AEM中配置OAuth客户端,分配专属的Client ID和Client Secret
- 移动应用启动时,用Client ID/Secret向AEM的令牌端点请求Bearer令牌
- 每次调用API时,在请求头中携带
Authorization: Bearer <token> - AEM端通过OAuth验证过滤器校验令牌的有效性和权限范围
3. IP白名单过滤
如果移动应用的请求来源IP是固定的(比如应用后端服务IP),可以在Dispatcher层配置IP白名单,直接拦截非法IP的请求:
- 配置方式:
- 在Dispatcher的farm配置文件中,针对目标API路径添加过滤规则
- 仅允许指定IP/IP段的请求通过,其他IP直接返回
403 Forbidden - 这种方式简单高效,但仅适用于IP固定的场景
4. 请求签名验证
通过请求签名确保请求的合法性和完整性,防止篡改和重放攻击:
- 实现逻辑:
- 移动应用端:用请求参数、当前时间戳、共享密钥,通过HMAC-SHA256等算法生成签名
- 将时间戳和签名放在请求头(如
X-Timestamp、X-Signature)中发送 - AEM端:获取请求参数、时间戳,用相同密钥和算法计算签名,与请求头中的签名比对
- 同时检查时间戳的有效期,避免过期请求被重复利用
5. 多层防护组合
建议结合多种方式提升安全性,比如:
- Dispatcher层做IP白名单和路径过滤,拦截大部分非法请求
- AEM内部用API密钥或OAuth令牌做身份校验
- 同时启用请求签名,防止请求被篡改
内容的提问来源于stack exchange,提问作者Mario R
相关产品推荐
相关产品推荐

