6

Ich habe mich entschieden, Fine Uploader für mein aktuelles AngularJS Projekt zu verwenden (welches mit Firebase gehostet wird) weil es viele Kernfunktionen hat, die ich in einem Uploader bereits eingebaut brauche, aber ich habe Probleme zu verstehen, wie man es benutzt Firebase's email & password authentication method für die Kommunikation mit AWS (Amazon Web Services), damit meine Benutzer Fine Uploader S3 zum Hochladen von Inhalten verwenden können. Basierend auf Fein Uploader Blog-Post Uploads without any server code, geht der Arbeitsablauf wie:Wie verwende ich die E-Mail- und Passwort-Authentifizierungsmethode von Firebase, um eine Verbindung mit AWS herzustellen, damit Fine Uploader S3 funktioniert?

  1. Authentifizieren Benutzer mit Hilfe eines Identity-Provider wie Google
  2. Verwenden Sie den temporären Token von Ihrem ID-Provider temporären Zugriffsschlüssel greifen aus AWS
  3. Führen Sie die Tasten auf Fine Uploader S3
  4. Ihre Benutzer können jetzt auf Ihre S3 Eimer laden

Das Problem ist, dass ich wird nicht verwenden OAuth 2.0 (die von Google, Facebook oder Amazon verwendet wird, um Benutzeridentitäten bereitzustellen) zu erlauben, dass meine Benutzer in meine App anmelden und Inhalte hochladen. Stattdessen werde ich Firebases E-Mail & Passwort-Authentifizierung verwenden.

So wie kann ich Firebase E-Mail & Passwortauthentifizierungsmethode ein temporäres Token erstellen, um temporäre Zugriffstasten von AWS zu greifen und diese Schlüssel an Fine Uploader S3 weiterzuleiten, damit meine Benutzer Inhalte in S3 hochladen können?

+0

Haben Sie Fortschritte dabei gemacht? Ich habe das auch untersucht – getglad

+0

Ich musste jetzt warten, da andere Teile meiner App Aufmerksamkeit benötigten. Werden Sie in den nächsten Wochen zu einer Lösung übergehen? Kato hat eine Antwort gegeben, die einige Hinweise enthält. Dieser Link https://www.firebase.com/docs/web/guide/user-auth.html und dieser Link https://www.firebase.com/docs/web/guide/login/password.html enthält wertvolle Informationen . –

+0

Ich habe definitiv eine Lösung, aber es wird Server-Code benötigt. AWS bietet eine Möglichkeit zum Generieren von OpenID-Token mit einer Interaktion zwischen Ihrem Back-End und Cognito, aber Sie möchten diese Arbeitsclient-Seite nicht verfügbar machen. Der einzige Grund, warum ich mich zurückhalte, ist, dass du Arbeit ohne Servercode machst? – getglad

Antwort

0

Jeder OAuth-Anbieter hat eine leicht einzigartige Möglichkeit, Dinge zu handhaben, und so die Attribute, die in Ihrem Firebase-authentifizierten Token vary slightly based on provider verfügbar sind. Wenn zum Beispiel Facebook verwendet wird, werden die Facebook-Auth-Token bei facebook.accessToken in dem zurückgegebenen Benutzerobjekt gespeichert:

var ref = new Firebase(URL); 
ref.authWithOAuthPopup("facebook", function(error, authData) { 
    if (authData) { 
    // the access token for Facebook 
    console.log(authData.facebook.accessToken); 
    } 
}, { 
    scope: "email" // the permissions requested 
}); 

All dies in den User Authentication section of the Web Guide bedeckt ist.

+0

Richtig, aber wie kann ich Firebases E-Mail- und Passwort-Authentifizierungsmethode ein temporäres Token erstellen, um temporäre Zugriffsschlüssel von AWS zu erhalten? Nein, in den Firebase-Dokumenten wird erklärt, wie dies zu tun ist. –

2

Um Cognito mit einer externen Anwendung zu verbinden, wird Cognito eine gute Lösung sein. Damit können Sie ein OpenID-Token mit dem AWS Node SDK und Ihren geheimen Schlüsseln in Ihrem Backend generieren, die Sie dann mit dem AWS JavaScript SDK und WebIdentityCredentials in Ihrem Client verwenden können.

Beachten Sie, dass ich mit Ihrem spezifischen Plugin/Tool nicht vertraut bin, aber so viel wird Ihnen zumindest die OpenID bringen und in meiner Arbeit lässt es mich mit WebIdentityCredentials verbinden, was ich mir vorstellen, was sie verwenden.

  1. konfigurieren Cognito auf AWS

Setup auf Cognito ist ziemlich einfach - es ist mehr oder weniger ein Durchlauf. Es umfasst jedoch die Konfiguration von IAM-Regeln für AWS. Die Einrichtung ist ziemlich projektspezifisch, daher denke ich, dass ich Sie auf die offiziellen Ressourcen hinweisen muss. They recently made some nice updates, aber bei all den Änderungen bin ich zugegebenermaßen nicht auf dem neuesten Stand.

Durch die Konfiguration möchten Sie eine 'authentifizierte Entwickleridentität' einrichten, die Identitäts-Pool-ID und die von Cognito eingerichtete IAM-Rollen-ARN beachten.

  1. Richten Sie einen Knoten Server, der eingehende Routen

Es verarbeiten kann es eine Menge von Materialien gibt, wie dies zu erreichen, aber Sie wollen sicher sein, schließen und konfigurieren Sie die AWS SDK. Ich empfehle auch, body-parser zu verwenden, da dies das Lesen Ihrer POST-Anfragen erleichtert.

var app  = express(); 
var bodyParser = require('body-parser'); 
var AWS  = require('aws-sdk'); 
app.use(bodyParser.urlencoded({ extended: true })); 
app.use(bodyParser.json()); 
  1. POST Funktion erstellen mit Cognito

sprechen Sobald Sie Ihren Server-Setup haben, können Sie dann erreichen, um Cognito getOpenIdTokenForDeveloperIdentity verwenden. In meinem Setup verwende ich authentifizierte Benutzer, da ich erwarte, dass sie zurückkommen und die Verknüpfungen fortsetzen möchten. Aus diesem Grund sende ich eine UserID in req.body.UserIDFromAngularApp.

Dies ist meine Funktion mit express.router().

Wenn alles gut geht, wird Ihnen ein OpenID-Token zurückgegeben. Sie können das dann an Ihre Angular-Anwendung zurückgeben. aus dem Versprechen

  1. POST von Angular, von Promise sammeln

Am allerwenigsten Sie zu Ihrem neuen Knotenserver schreiben müssen und dann das Token OpenID sammeln. Unter Verwendung dieses Musters wird das in data.Token gefunden.

Es klingt wie von dort aus müssen Sie nur dieses Token an Ihr Plugin/Tool übergeben.

Wenn Sie handle authentication further benötigen, habe ich Code enthalten, um die WebIdentityCredentials zu behandeln.

angular.module('yourApp').factory('AWSmaker', ['$http', function($http) { 
    return { 
     reachCognito: function(authData) { 
     $http.post('http://localhost:8888/simpleapi/aws', { 
      'UserIDFromAngularApp': authData.uid, 
     }) 
     .success(function(data, status, headers, config) { 
      if(!data.failure) { 
       var params = { 
        RoleArn: your_role_arn_setup_by_cognito, 
        WebIdentityToken: data.Token 
       }; 
       AWS.config.credentials = new AWS.WebIdentityCredentials(params, function(err) { 
        console.log(err, err.stack); 
       }); 
      } 
     }); 
     } 
}]); 

Dies sollte Sie auf Ihrem Weg bekommen. Lass es mich wissen, wenn ich weiter helfen kann.

+0

Ok, das ist großartig. Mir ist klar, dass ich mich zuerst damit befassen sollte, meinen veralteten authentischen AngularFire Firebase-Code erfolgreich zu aktualisieren. Sobald das erledigt ist, werde ich das noch einmal durchgehen, aber nachdem ich das durchgelesen habe, versuche ich auf Anhieb zu verstehen, wo Firebase Auth hier ankommt. Ich werde mich auch mit der Integration von Express in meine aktuelle Angular App beschäftigen müssen. So viel zu tun und viele Fragen, aber wenn ich muss, werde ich neue bitten, organisiert zu bleiben. Vielen Dank! :) –