【发布时间】:2016-11-23 02:08:26
【问题描述】:
我的目标:拥有一个不需要用户登录的移动应用程序。让这些未经身份验证的用户访问我的服务器。
我所拥有的:我的服务器正在使用 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");
}
}
});
};
【问题讨论】:
-
如果您的用户未经身份验证,您希望他们如何收到 JWT?
-
对不起,我对网络安全还是很陌生。如果令牌不是答案,我是否可以利用另一种安全措施来防止任何人访问我的服务器?
标签: amazon-web-services jwt access-token aws-lambda aws-api-gateway