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.
- 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.
- 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());
- 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
- 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.
Haben Sie Fortschritte dabei gemacht? Ich habe das auch untersucht – getglad
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 . –
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