aws-lambda - 为什么在 API Gateway 中使用 Authorizers 时只有令牌 id 成功而不是访问令牌?
问题描述
我有一个 lambda,它为我的用户池中的现有用户创建令牌,但是当我要验证访问令牌时返回错误 401,当我尝试使用 ID 令牌时它返回 200。
function asyncAuthenticateUser(cognitoUser, cognitoAuthenticationDetails) {
return new Promise(function(resolve, reject) {
cognitoUser.authenticateUser(cognitoAuthenticationDetails, {
onSuccess: resolve,
onFailure: reject
});
});
}
var authenticationData = {
Username: name,
Password: password,
};
var authenticationDetails = new AmazonCognitoIdentity.AuthenticationDetails(authenticationData);
var poolData = {
UserPoolId: UserPoolId,
ClientId: ClientId
};
var userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData);
var userData = {
Username: name,
Pool: userPool
};
var cognitoUser = new AmazonCognitoIdentity.CognitoUser(userData);
try {
let session = await asyncAuthenticateUser(cognitoUser, authenticationDetails);
cognitoJWT.session = session;
console.log(session.getIdToken());
cognitoJWT.jwtAccess = session.getAccessToken().getJwtToken();
cognitoJWT.jwtId = session.getIdToken().getJwtToken();
cognitoJWT.jwtRefresh = session.getRefreshToken().getToken();
cognitoJWT.jwtPayloads = {
jwtAccess: session.getAccessToken().decodePayload(),
jwtId: session.getIdToken().decodePayload(),
};
callback(null, cognitoJWT);
} catch (err){callback(err,null); }
我的 Lambda 输出是:
{
"StatusCode": 200,
"StatusMessage": {
"jwtAccess": "<<jwtAccess>>",
"jwtRefresh":"<<jwtRefresh>>",
"jwtId":<<jwtId>>
}
}
但是当我尝试在 API 网关上进行验证时,我得到了这个输出。
如果我尝试使用 jwtID,它会显示用户信息。 输出 API 网关 jwtId
解决方案
使用错误的令牌进行验证。API Gateway 实际上使用 de "idToken" 进行验证,而不是 "accessToken"。所以当你要测试token时,你必须使用第一个。
推荐阅读
- c - C:如何在一次使用scanf一个字符时从键盘或文件获取输入结束时停止循环
- c - 为什么我不能在 C 中遍历这个链表?
- postgresql - Postgresql中的自定义字母数字序列?
- python - Python中的pip安装包遇到错误
- xamarin - 如何处理大块文本
- java - 休眠单向 oneToMany FK 0 而不是真实 ID
- linux - 验证 AD 用户是否可以在 SuSE 上使用 SSSD 登录
- c++ - 在这种情况下,我可以避免使用身体的纯虚函数吗
- selenium - Selenium IDE - 导出测试脚本
- elasticsearch - 是否可以使用弹性搜索检索与我的查询匹配的数组中的对象?