【问题标题】:How to validate non authenticated users from a mobile app on a server?如何从服务器上的移动应用程序验证未经身份验证的用户?
【发布时间】: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


【解决方案1】:

我的问题:从下面的代码块 (A),我得到的印象是 应该使用智威汤逊。如何使用 JWT 验证未经身份验证的用户 这些令牌何时到期?如果 JWT 不是最好用的东西,那是什么 会是吗?

为什么您需要任何验证?如果您想允许对您的 API 进行未经身份验证的访问,您应该这样做并节省一些精力。

更新

如果您想限制访问并且不需要用户登录,您可能需要考虑简单地使用Cognito Identity。它支持未经身份验证的身份以及通过 Cognito 您的用户池或其他联合提供商迁移到经过身份验证的访问。值得注意的是,如果您走这条路,您将希望在您的应用中正确保护/隐藏您的身份池 ID,以最大程度地减少它被提取的机会。

使用 Cognito Identity,您将能够获取 AWS 凭证以使用标准签名版本 4 对 API 请求进行签名,并避免管理自定义授权方的成本和开销。

【讨论】:

  • 我想保护我的终点不让任何人打到它。我注意到很多应用程序都提供此功能,例如 Hotel Tonight,我认为它们必须有安全措施?如果令牌不是答案,我正在寻找关于这可能是什么的指导。
  • 谢谢!这是有用的信息。
猜你喜欢
  • 2015-10-25
  • 2016-01-17
  • 2015-06-03
  • 1970-01-01
  • 2012-11-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-15
  • 2014-07-10
相关资源
最近更新 更多