0

Mein Ziel: Lassen Sie eine mobile App verwenden, bei der sich keine Benutzer anmelden müssen. Lassen Sie diese nicht authentifizierten Benutzer meinen Server erreichen.Wie validiere ich nicht authentifizierte Benutzer von einer mobilen App auf einem Server?

Was ich habe: Mein Server verwendet das AWS API Gateway/AWS Lambda-Setup. Die benutzerdefinierte Autorisierung, die ich für AWS API Gateway verwendet habe, wurde mit dieser example entwickelt. Ich habe auch den Code aus diesem Beispiel unter (A) eingefügt.

Meine Frage: Aus dem Codeblock unter (A), habe ich den Eindruck ich JWT verwendet werden soll. Wie kann ich JWT verwenden, um nicht authentifizierte Benutzer zu validieren, wenn diese Tokens ablaufen? Wenn JWT nicht das Beste ist, was wäre das?

Danke!

(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, "https://stackoverflow.com/users/" + verifiedJwt.body.sub); 
    } 

    context.succeed(policy.build()); 

    } catch (ex) { 
    console.log(ex, ex.stack); 
    context.fail("Unauthorized"); 
    } 
} 
}); 
}; 
+0

Wenn Ihre Benutzer nicht authentifiziert sind, wie erwarten Sie, dass sie ein JWT erhalten? –

+0

Entschuldigung, ich bin immer noch sehr neu in der Internetsicherheit. Wenn Tokens nicht die Antwort sind, gibt es eine andere Sicherheitsmaßnahme, die ich verwenden könnte, damit ich nicht zulassen kann, dass irgendjemand meinen Server trifft? – dawgPeter

Antwort

0

Meine Frage: Aus dem Codeblock unter (A), ich habe den Eindruck, ich sollte JWT verwenden. Wie kann ich JWT verwenden, um nicht authentifizierte Benutzer zu validieren, wenn diese Token ablaufen? Wenn JWT nicht das Beste ist, was wäre ?

Warum brauchen Sie überhaupt eine Validierung? Wenn Sie nicht authentifizierten Zugriff auf Ihre API zulassen möchten, sollten Sie dies tun und sich etwas Mühe sparen.

aktualisieren

Wenn Sie den Zugriff einschränken möchten und keinen Benutzer benötigen um sich einzuloggen, einfach zu prüfen, können Sie Cognito Identity verwenden. Es unterstützt nicht authentifizierte Identitäten und die Migration zu authentifiziertem Zugriff über Cognito Ihre Benutzerpools oder einen anderen Verbundanbieter. Es ist erwähnenswert, dass Sie Ihre Identitätspool-ID in Ihrer App sichern/verdunkeln möchten, wenn Sie diese Route verwenden, um die Wahrscheinlichkeit zu minimieren, dass sie extrahiert wird. Mit Cognito Identity können Sie AWS-Anmeldeinformationen abrufen, um die Anforderungen an Ihre API mit der Standard-Signaturversion 4 zu signieren und die Kosten und den Aufwand für die Verwaltung eines benutzerdefinierten Authorizers zu vermeiden.

+0

Ich möchte meinen Endpunkt schützen, damit niemand es trifft. Ich habe bemerkt, dass viele Apps dies anbieten, wie das Hotel Tonight, und ich nehme an, dass sie Sicherheit haben müssen? Wenn Token nicht die Antwort sind, suche ich eine Anleitung, was das sein könnte. – dawgPeter

+0

@ user3357291 Siehe Update –

+0

Vielen Dank! Das war hilfreiche Informationen. – dawgPeter