Heim  >  Artikel  >  Backend-Entwicklung  >  Gemeinsame API-Signaturüberprüfungsmethoden (PHP-Implementierung)

Gemeinsame API-Signaturüberprüfungsmethoden (PHP-Implementierung)

安安杰尼
安安杰尼Original
2020-04-29 12:37:29199033Durchsuche

Nutzungsszenarien

Immer mehr Projekte nutzen das Front-End- und Back-End-Trennmodell für die Entwicklung. Back-End-Entwickler nutzen API-Schnittstellen, um Daten zur Verarbeitung und Anzeige an Front-End-Entwickler zu übertragen. Bei einigen wichtigeren Änderungen an Datenschnittstellen, bei denen es um Geld, Benutzerinformationen usw. geht, ist es für jemanden oft leicht, die Schnittstelle böswillig zu klauen, wenn die Schnittstellen nicht geschützt und überprüft werden, was zu großen Verlusten führt.

API-Signaturüberprüfung

Hier stellen wir eine in der Branche gängigere Signaturüberprüfung vor, um die Parameter der Schnittstelle zu verschlüsseln, die die folgenden Vorteile bietet.

  • Gewünschte Eindeutigkeit: Die berechnete Signatur ist eindeutig und kann zur Verifizierung verwendet werden.

  • Parametervariabilität: Der Parameter enthält den Zeitstempelparameter, der sicherstellt, dass die für jede Anfrage berechnete Signatur unterschiedlich ist.

  • Aktualität der Anfrage: Da die Anfrage den Zeitstempelparameter der aktuellen Anfrage enthält, kann der Server den Zeitstempel überprüfen und Anfragen filtern, die die Aktualität überschreiten.

  • Sicherheit: Auch wenn die Anfrage böswillig erfasst und die Parameter böswillig manipuliert werden, ist die Signatur falsch und die Parameter können nicht geändert werden.

Übung macht die Wahrheit wahr

1. Sortieren Sie die zu signierenden Daten nach Kartentyp (d. h. einen Satz von Schlüssel-Wert-Paaren) nach der Größe der Schlüssel. Die Parameter in der Karte werden in alphabetischer Reihenfolge sortiert. Wenn die ersten Buchstaben gleich sind, werden sie nach dem zweiten Buchstaben sortiert und so weiter. Zum Beispiel

{
    "timestamp": "2017-06-08 09:38:00",
    "format": "xml",
    "app_id": "aabbc",
    "cp_extend_info": "",
    "sign_type": "HMAC-SHA1",
    "sign": "abc"
}

, dann wird es nach dem Sortieren zu

{
    "app_id": "aabbc",
    "cp_extend_info": "",
    "format": "xml",
    "sign_type": "HMAC-SHA1",
    "timestamp": "2017-06-08 09:38:00"
}

Hinweis: Wenn die Karte einen Signaturparameter (Zeichen) enthält, ist der Schlüsselwert von Der Parameter muss gefiltert werden. Bitte nehmen Sie nicht am Signieren von Parametern ohne Werte teil.

2. Serialisieren Sie die sortierte Karte in eine zu signierende Zeichenfolge zu signieren ist

rrree

3. Verwenden Sie den Schlüssel, um die Digest-Signatur (Hash) der zu signierenden Zeichenfolge gemäß dem HMAC-SHA1-Algorithmus zu extrahieren und sie mit base64_encode zu kodieren (um die explizite Übertragung und den Vergleich zu erleichtern). Der Signaturschlüssel ist test, die extrahierte Digest-Signatur lautet. Der Wert für base64_encode ist

app_id=aabbc&format=xml&sign_type=HMAC-SHA1&timestamp=2017-06-08 09:38:00

Hinweis: Da einige Daten für das HTTP-Protokoll erforderlich sind, muss währenddessen eine URL-Verschlüsselung durchgeführt werden Netzwerkübertragung, damit der Empfänger die richtigen Parameter empfangen kann. Wenn dieser Parameter jedoch an der Signatur beteiligt ist, muss die zu signierende Zeichenfolge der ursprüngliche Wert der Zeichenfolge und nicht der Wert von URLencoding sein.

Code-Praxis

PHP-Beispiel

JqoEqPIVVor0eyRHMYiZftsycVo=

Das Obige ist die API-Überprüfungssignaturmethode, die häufig in der täglichen Entwicklung verwendet wird. Es ist sehr einfach und sehr nützlich, um weitere Tutorials zu erhalten.

Das obige ist der detaillierte Inhalt vonGemeinsame API-Signaturüberprüfungsmethoden (PHP-Implementierung). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn