为什么在 API 网关中使用授权器时只有令牌 ID 成功而不是访问令牌?
why only the token id is successful and not the access token when using Authorizers in API Gateway?
我有一个 lambda 可以为我的用户池中的现有用户创建令牌,但是当我要验证访问令牌时 returns 出现错误 401,当我尝试使用 ID 令牌时它 returns一个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 网关上验证时,我得到了这个输出。
Output API gateway jwtAccess
如果我尝试使用 jwtID,它会显示用户信息。
Output API gateway jwtId
使用错误的令牌进行验证。
API 网关实际上使用“idToken”进行验证,而不是“accessToken”。所以当你要测试token的时候,一定要用firstone。
我有一个 lambda 可以为我的用户池中的现有用户创建令牌,但是当我要验证访问令牌时 returns 出现错误 401,当我尝试使用 ID 令牌时它 returns一个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 网关上验证时,我得到了这个输出。
Output API gateway jwtAccess
如果我尝试使用 jwtID,它会显示用户信息。 Output API gateway jwtId
使用错误的令牌进行验证。 API 网关实际上使用“idToken”进行验证,而不是“accessToken”。所以当你要测试token的时候,一定要用firstone。