我的目标:拥有一个不需要用户登录的移动应用。让这些未经身份验证的用户点击我的服务器。
我拥有的内容:我的服务器正在使用AWS API Gateway / AWS Lambda设置。我用于AWS API Gateway的自定义授权程序是使用此example设计的。我还粘贴了以下示例中的代码(A)。
我的问题:从下面的代码块(A)中,我得到了应该使用JWT的印象。 如何我可以使用JWT在这些令牌过期时验证未经身份验证的用户?如果JWT不是最好用的,那会是什么?
谢谢!
(A)
var nJwt = require('njwt');
var AWS = require('aws-sdk');
var signingKey = "CiCnRmG+t+ BASE 64 ENCODED ENCRYPTED SIGNING KEY Mk=";
exports.handler = function(event, context) {
console.log('Client token: ' + event.authorizationToken);
console.log('Method ARN: ' + event.methodArn);
var kms = new AWS.KMS();
var decryptionParams = {
CiphertextBlob : new Buffer(signingKey, 'base64')
}
kms.decrypt(decryptionParams, function(err, data) {
if (err) {
console.log(err, err.stack);
context.fail("Unable to load encryption key");
} else {
key = data.Plaintext;
try {
verifiedJwt = nJwt.verify(event.authorizationToken, key);
console.log(verifiedJwt);
// parse the ARN from the incoming event
var apiOptions = {};
var tmp = event.methodArn.split(':');
var apiGatewayArnTmp = tmp[5].split('/');
var awsAccountId = tmp[4];
apiOptions.region = tmp[3];
apiOptions.restApiId = apiGatewayArnTmp[0];
apiOptions.stage = apiGatewayArnTmp[1];
policy = new AuthPolicy(verifiedJwt.body.sub, awsAccountId, apiOptions);
if (verifiedJwt.body.scope.indexOf("admins") > -1) {
policy.allowAllMethods();
} else {
policy.allowMethod(AuthPolicy.HttpVerb.GET, "*");
policy.allowMethod(AuthPolicy.HttpVerb.POST, "/users/" + verifiedJwt.body.sub);
}
context.succeed(policy.build());
} catch (ex) {
console.log(ex, ex.stack);
context.fail("Unauthorized");
}
}
});
};
答案 0 :(得分:0)
我的问题:从下面的代码块(A)中,我得到的印象是我 应该使用JWT。如何使用JWT验证未经身份验证的用户 当这些代币到期时?如果JWT不是最好用的,那是什么 会是吗?
为什么需要进行任何验证?如果您想允许对API进行未经身份验证的访问,您应该这样做并省去一些努力。
更新
如果您想限制访问和不要求用户登录,您可能需要考虑使用Cognito Identity。它支持未经身份验证的身份以及通过Cognito Your User Pools或其他联合提供程序迁移到经过身份验证的访问。值得注意的是,如果你走这条路线,你会想要在你的应用程序中正确保护/隐藏你的身份池ID,以尽量减少它被提取的机会。
使用Cognito Identity,您可以使用标准签名版本4获取AWS凭据以对API的请求进行签名,并避免管理自定义授权程序的成本和开销。