Heim > Artikel > Betrieb und Instandhaltung > Was ist ein einfacher und sicherer API-Autorisierungsmechanismus basierend auf einem Signaturalgorithmus?
Als ich an einem Werbesystem arbeitete, stellte ich fest, dass die Werbesysteme der meisten Plattformen, mit denen ich verbunden war, Token zur Autorisierung von Schnittstellen verwendeten, und dieser Token blieb unverändert und wurde von Werbetreibenden bereitgestellt. Man kann sagen, dass dies das Streaken ist Schnittstelle, aber das ist Diese Art von Schnittstelle stellt keine hohen Sicherheitsanforderungen, die nur böswillige Aufrufe verhindern und die Identität des Kanals überprüfen können.
Letztes Jahr hat der Autor eine einheitliche API-Autorisierungsplattform geschrieben, die eine einheitliche Autorisierungsverwaltung für offene Schnittstellen für interne Dienste und Systemaufrufe von Drittanbietern bietet. Abgesehen von der Erleichterung der Verwaltungsschnittstellenautorisierung hat sie keinen anderen Zweck, die Bereitstellung kostet jedoch Geld . Das ist wahrscheinlich das sinnloseste Projekt, das ich je gemacht habe.
Der heute eingeführte API-Autorisierungsmechanismus ist möglicherweise auch ein weiter verbreiteter API-Schnittstellen-Autorisierungsmechanismus. Ich erinnere mich, dass die von WeChat bereitgestellte Zahlungsschnittstelle auch diese Methode verwendete, als der Autor die WeChat-Zahlungsfunktion ausführte. Vorteile: Einfach, keine Beeinträchtigung der Leistung, keine zusätzlichen Kosten.
Die Implementierungslogik dieser Autorisierungsmethode besteht darin, dass der Autorisierer für jede Zugriffsplattform eine eindeutige Identität (Schlüssel) und einen unabhängigen Schlüssel festlegt, was tatsächlich einem Kontokennwort entspricht. Das zugreifende System muss jedes Mal, wenn es eine Anfrage initiiert, drei Parameter im Anfrageheader tragen, nämlich die Identität (Schlüssel), den Zeitstempel der Anfrage und die Signatur. Das autorisierte System überprüft die Signatur, wenn es die Anfrage empfängt wird nur freigegeben, wenn es bestanden wird.
Der Prozess der Signaturüberprüfung besteht darin, den Schlüssel und den Zeitstempel aus dem Anforderungsheader abzurufen, dann eine Signatur mit demselben Algorithmus basierend auf dem Schlüssel zu generieren (der Aufrufer und der Autorisierende verwenden denselben Signaturalgorithmus) und schließlich die Signaturen zu vergleichen Wird aus dem Anforderungsheader abgerufen, um festzustellen, ob sie gleich sind. Wenn ja, ist die Überprüfung erfolgreich, andernfalls schlägt die Überprüfung fehl.
Der Implementierungsprozess der Autorisierungsmethode basierend auf dem Signaturalgorithmus ist wie folgt:
Autorisierer:
1 Definieren Sie den Signaturalgorithmus, stellen Sie der Zugriffspartei den Signaturgenerierungsalgorithmus zur Verfügung und generieren Sie den Schlüssel und die Identität dafür die Zugriffspartei;
2. Fangen Sie die Schnittstelle ab, die eine Signaturüberprüfung im Projekt erfordert, erhalten Sie den Zeitstempel und die Identität aus dem Anforderungsheader, generieren Sie eine Signatur basierend auf dem Schlüssel und dem Signaturalgorithmus und vergleichen Sie die generierte Signatur mit der vom Anfrage-Header, und fahren Sie mit den Schritten fort, wenn sie identisch sind. 3. Andernfalls lehnen Sie die Anfrage ab. Überprüfen Sie die Aktualität. Vergleichen Sie den aktuellen Systemzeitstempel mit dem aus dem Anfrage-Header erhaltenen Zeitstempel Wenn Sie einen gültigen Zeitraum angeben, geben Sie die Anfrage frei, andernfalls lehnen Sie sie ab und antworten Sie, dass die Signatur abgelaufen ist.
Zugreifende Partei:1. Besorgen Sie sich das Docking-Dokument von der autorisierten Partei und fragen Sie die autorisierte Partei nach dem Schlüssel und der Identität.
2. Kapseln Sie die Signaturmethode gemäß dem vom Dokument bereitgestellten Signaturgenerierungsalgorithmus.
3. Bei einer Anfrage werden die Identität, der aktuelle Zeitstempel und die Signatur in den Anfrageheader geschrieben.
Der Signaturgenerierungsalgorithmus kann angepasst werden. Nach dem Zusammenfügen von Identität (Schlüssel), Zeitstempel (Zeitstempel) und Schlüssel wird beispielsweise ein irreversibler Algorithmus verwendet, um die Zeichenfolge zu verschlüsseln, um eine Signatur zu generieren, z. B. der MD5-Algorithmus. Je komplexer die Regeln, desto schwieriger sind sie zu knacken.
Welche Vorteile bietet das Hinzufügen eines Zeitstempels zu einer Signatur?
Der erste besteht darin, der Signatur Aktualität zu verleihen. Das Autorisierungssystem kann die Gültigkeitsdauer der Signatur auf eine Sekunde oder fünf Sekunden begrenzen, indem es den Anforderungszeitstempel zum Vergleich mit dem aktuellen Zeitstempel verwendet. Allerdings muss die Systemzeit beider Parteien stimmen.
Der zweite Punkt ist die Sicherheit: Wenn ein Hacker eine Anfrage von Ihrem System abfängt, die Anfrage dann ändert und dann eine Anfrage initiiert, wird es definitiv einige Zeit dauern, sodass die Gültigkeitsdauer der Signatur abgelaufen ist, wenn das System die manipulierte Anfrage erhält . Wenn Sie den im Anforderungsheader übergebenen Zeitstempel ändern, generiert das Autorisierungssystem der Anforderung eine andere Signatur als die im Anforderungsheader übergebene, sodass die Anforderung weiterhin ungültig ist.
Wenn Sie den Schlüssel nicht kennen, können Sie keine gültige Signatur erstellen, ohne die Signaturregeln der autorisierten Partei (Broiler) zu kennen. Mit einem asymmetrischen Verschlüsselungsalgorithmus signierte Dateien machen es nahezu unmöglich, den Schlüssel durch rohe Gewalt zu knacken.
Warum sollten dann Zeitstempel verwendet werden, anstatt Zeitzeichenfolgen zu formatieren?
Dies liegt möglicherweise an der Zeitzonenkompatibilität. Wenn sich verschiedene Computerräume in unterschiedlichen Zeitzonen befinden, sind die Zeitstempel jedoch gleich.
Um die Sicherheit dieser Autorisierungsmethode zu maximieren, müssen zunächst die Regeln zur Signaturgenerierung komplex genug sein, dann muss der Verschlüsselungsalgorithmus der Signatur irreversibel sein, niemals einen Algorithmus wie Base64 verwenden und schließlich der Schlüssel muss lang und komplex genug sein, um sicherzustellen, dass es selbst bei Kenntnis der Signaturgenerierungsregeln unmöglich ist, den Schlüssel durch rohe Gewalt zu knacken.
Signaturregeln beziehen sich auf die Regeln zum Generieren von Signaturzeichenfolgen vor der Verschlüsselung. Zu den Regeln gehören beispielsweise Schlüssel, geheimer Schlüssel und Zeitstempel, wobei Schlüssel und Schlüssel zweimal erscheinen. Angenommen, der Schlüssel ist „app“, der geheime Schlüssel ist „123“, der Zeitstempel ist „1111111111111“, die durch Spleißen erzeugte vorverschlüsselte Signatur ist „app1231111111111111app123“ und schließlich wird die gespleißte Zeichenfolge durch den Verschlüsselungsalgorithmus verschlüsselt um die endgültige Signatur zu erstellen.
Ist es nicht mühsam, die Signaturlogik für jede Schnittstelle zu schreiben?
Nein. Für den Autorisierer kann die Signaturverifizierungslogik durch Filter oder Interceptoren vervollständigt werden; für den Aufrufer gibt es verschiedene Methoden, die unterschiedliche Frameworks verwenden, aber wir können immer einen Weg finden, die Signaturlogik nur einmal zu schreiben, oder?
Das obige ist der detaillierte Inhalt vonWas ist ein einfacher und sicherer API-Autorisierungsmechanismus basierend auf einem Signaturalgorithmus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!