如何合并Amazon Cognito认证与资源服务器API请求以优化加载速度?
能否合并Cognito认证令牌请求与资源服务器用户详情请求?
我的应用启动时需要执行两步API调用:
- 向Amazon Cognito服务器请求认证令牌
- 使用获取到的令牌向资源服务器请求用户详情
希望合并这两个请求以缩短应用加载时长,两个请求的具体信息如下:
Cognito认证请求
POST https://cognito-idp.us-west-1.amazonaws.com/ Content-Type: application/json { "AuthParameters" : { "USERNAME" : "...", "PASSWORD" : "..." }, "AuthFlow" : "USER_PASSWORD_AUTH", "ClientId" : "..." }
资源服务器用户详情请求
GET {{base_url}}/user/flag Authorization: Bearer <auth-token>
可行的合并方案
1. 借助Cognito预令牌生成Lambda触发器
Cognito的Pre Token Generation Lambda触发器会在生成ID令牌和访问令牌前触发。可以在这个Lambda里调用资源服务器获取用户详情,然后将这些信息嵌入到Cognito返回的令牌(比如ID Token的自定义字段)中。这样一次Cognito认证请求就能同时拿到令牌和用户详情,无需再单独调用资源服务器。
注意事项:
- 令牌自定义字段有大小限制,避免嵌入过大的数据;
- Lambda调用资源服务器的延迟会叠加到Cognito认证请求的耗时中,需要评估是否在可接受范围内。
2. 改造资源服务器接口
修改资源服务器的/user/flag接口,让它直接接收用户名和密码。接口内部先调用Cognito完成认证获取令牌,再查询用户详情,最后将令牌和用户详情一并返回给前端。这样前端只需调用这一个接口就能获取所有所需数据。
注意事项:
- 资源服务器需要存储Cognito客户端信息(如ClientId);
- 要妥善处理认证失败的场景;
- 前端传输用户名密码时必须使用HTTPS加密,确保数据安全。
3. 并行请求优化(非严格合并)
如果上述两种改造方案不可行,可以尝试并行请求优化:在前端发起Cognito认证请求的同时,提前与资源服务器建立连接,一旦拿到认证令牌,立刻发送带令牌的用户详情请求。这种方式本质还是两次请求,但能减少连接建立的耗时,相比串行请求缩短总加载时间。
内容的提问来源于stack exchange,提问作者Damika
相关产品推荐
相关产品推荐

