Ich entwerfe einen RESTful-Webdienst, auf den Benutzer, aber auch andere Webdienste und -anwendungen zugreifen müssen. Alle eingehenden Anforderungen müssen authentifiziert werden. Die gesamte Kommunikation erfolgt über HTTPS. Die Benutzerauthentifizierung funktioniert basierend auf einem Authentifizierungstoken, das durch POSTEN des Benutzernamens und des Kennworts (über eine SSL-Verbindung) an eine vom Dienst bereitgestellte / Sitzungsressource erworben wurde .
Bei Webdienst-Clients steht hinter dem Client-Dienst kein Endbenutzer . Die Anforderungen werden durch geplante Aufgaben, Ereignisse oder andere Computeroperationen ausgelöst. Die Liste der Verbindungsdienste ist im Voraus bekannt (offensichtlich, denke ich). Wie soll ich diese Anfragen von anderen (Web-) Diensten authentifizieren? Ich möchte, dass der Authentifizierungsprozess für diese Dienste so einfach wie möglich implementiert wird, jedoch nicht auf Kosten der Sicherheit. Was wären die Standard- und Best Practices für ein solches Szenario?
Optionen, an die ich denken kann (oder die mir vorgeschlagen wurden):
Lassen Sie die Client-Dienste auf einen "falschen" Benutzernamen und ein falsches Kennwort zurückgreifen und authentifizieren Sie sie auf die gleiche Weise wie Benutzer. Ich mag diese Option nicht - sie fühlt sich einfach nicht richtig an.
Weisen Sie dem Client-Service eine permanente Anwendungs-ID zu, möglicherweise auch einen Anwendungsschlüssel. Soweit ich verstanden habe, ist dies genau das Gleiche wie Benutzername + Passwort. Mit dieser ID und diesem Schlüssel kann ich entweder jede Anforderung authentifizieren oder ein Authentifizierungstoken erstellen, um weitere Anforderungen zu authentifizieren. In beiden Fällen gefällt mir diese Option nicht, da jeder, der die Anwendungs-ID und den Schlüssel erhalten kann, sich als Client ausgeben kann.
Ich könnte der vorherigen Option eine IP-Adressprüfung hinzufügen. Dies würde es schwieriger machen, gefälschte Anfragen auszuführen.
Client-Zertifikate. Richten Sie meine eigene Zertifizierungsstelle ein, erstellen Sie ein Stammzertifikat und erstellen Sie Clientzertifikate für die Clientdienste. Es fallen jedoch einige Probleme ein: a) Wie erlaube ich den Benutzern immer noch, sich ohne Zertifikate zu authentifizieren, und b) wie kompliziert ist die Implementierung dieses Szenarios aus Sicht des Client-Service?
Noch etwas - es muss andere Lösungen geben?
Mein Dienst würde auf Java ausgeführt, aber ich habe bewusst Informationen darüber ausgelassen, auf welchem spezifischen Framework er aufbauen würde, da ich mich mehr für die Grundprinzipien und nicht so sehr für die Implementierungsdetails interessiere - ich gehe von der besten Lösung für diesen Willen aus unabhängig vom zugrunde liegenden Framework implementiert werden können. Ich bin jedoch etwas unerfahren mit diesem Thema, daher werden auch konkrete Tipps und Beispiele zur tatsächlichen Implementierung (wie nützliche Bibliotheken, Artikel usw. von Drittanbietern) sehr geschätzt.