Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung des Tokens in der PHP-Schnittstelle

Detaillierte Erläuterung des Tokens in der PHP-Schnittstelle

小云云
小云云Original
2018-03-20 13:39:4411189Durchsuche


Dieser Artikel teilt Ihnen hauptsächlich die detaillierte Erklärung des Tokens der PHP-Schnittstelle mit und hofft, allen zu helfen. Werfen wir zunächst einen Blick auf die Zusammenfassung der Schnittstellenfunktionen:

Zusammenfassung der Schnittstellenfunktionen:

1 Da es nicht offen ist, sind alle Schnittstellen geschlossen und nur innerhalb verfügbar Das Produkt ist gültig.

2. Da es nicht offen ist, ist das OAuth-Protokoll nicht möglich, da es keinen zwischengeschalteten Benutzerautorisierungsprozess gibt ;

Für den Zugriff auf einige Schnittstellen ist keine Benutzeranmeldung erforderlich.

Das erste Token ist für die Schnittstelle (api_token);
Das zweite Token ist für den Benutzer (user_token);

Lassen Sie uns zuerst über das erste sprechen Token (api_token)


Seine Aufgabe besteht darin, die Verschleierung und Wirksamkeit des Schnittstellenzugriffs aufrechtzuerhalten und sicherzustellen, dass die Schnittstelle nur von der eigenen Familie verwendet werden kann. Die Referenzidee lautet wie folgt:
Generieren Sie eine zufällige Zeichenfolge basierend auf den gemeinsamen Attributen des Servers und des Clients. Der Client generiert diese Zeichenfolge, und der Server generiert auch eine Zeichenfolge basierend auf demselben Algorithmus, um die des Clients zu überprüfen Zeichenfolge.

Die aktuelle Schnittstelle ist im Wesentlichen im MVC-Modus und die URL ist im Wesentlichen im Restful-Stil. Das allgemeine Format der URL ist wie folgt:
http://blog.snsgou.com/module name/controller name /Methodenname?Parametername 1=Parameterwert 1&Parametername 2=Parameterwert 2&Parametername 3=Parameterwert 3

Die Regeln für die Schnittstellen-Token-Generierung lauten wie folgt:

api_token = md5 ('Modulname' + 'Controllername ' + 'Methodenname' + '2013-12-18' + 'Verschlüsselungsschlüssel') = 770fed4ca2aabd20ae9a5dd774711de2

wobei

1, '2013-12-18' die Tageszeit ist,
2, „Verschlüsselungsschlüssel“ ist ein privater Verschlüsselungsschlüssel. Nachdem das Mobiltelefon ein „Schnittstellenbenutzer“-Konto auf dem Server registriert hat, weist das System ein Konto und ein Kennwort zu. Die Designreferenz für die Datentabelle lautet wie folgt:
Feldname Feld Typanmerkung
client_id varchar( 20) Client-ID
client_secret varchar(20) Client-(Verschlüsselungs-)Schlüssel



Serverschnittstellenüberprüfung, PHP-Implementierungsprozess ist wie folgt:


Lassen Sie uns über das zweite Token (user_token) sprechen

Seine Aufgabe besteht darin, den Benutzernamen und das Passwort des Benutzers vor der mehrfachen Übermittlung zu schützen, um einen Passwortverlust zu verhindern.

Wenn die Schnittstelle eine Benutzeranmeldung erfordert, ist der Zugriffsprozess wie folgt:

1. Der Benutzer gibt den „Benutzernamen“ und das „Passwort“ ein, um sich anzumelden (wenn die Bedingungen dies zulassen, verwenden Sie diese am besten https für diesen Schritt);

2. Nach erfolgreicher Anmeldung gibt der Server ein user_token zurück. Die Generierungsregeln lauten wie folgt:
<?php   
// 1、获取 GET参数 值   
$module = $_GET[&#39;mod&#39;]; $controller = $_GET[&#39;ctl&#39;]   
$action = $_GET[&#39;act&#39;]; $client_id = $_GET[&#39;client_id&#39;];   
$api_token = $_GET[&#39;api_token‘];   
// 2、根据客户端传过来的 client_id ,查询数据库,获取对应的 client_secret   
$client_secret = getClientSecretById($client_id);   
// 3、服务端重新生成一份 api_token   
$api_token_server = md5($module . $controller . $action .  date(&#39;Y-m-d&#39;, time()) .  $client_secret);   
// 4、客户端传过来的 api_token 与服务端生成的 api_token 进行校对,如果不相等,则表示验证失败   
if ($api_token != $api_token_server) {   
    exit(&#39;access deny&#39;);  // 拒绝访问 } // 5、验证通过,返回数据给客户端    
?>
user_token = md5('user's uid' + 'Unix timestamp') = etye0fgkgk4ca2aabd20ae9a5dd77471fgf

Der Server verwendet eine Datentabelle, um den Status von user_token aufrechtzuerhalten. Das Tabellendesign ist wie folgt:

Feldname, Feldtypanmerkung

user_id int Benutzer-ID
user_token varchar(36) Benutzertoken
expire_time int Ablaufzeit (Unix-Zeitstempel)


(Hinweis: Es werden nur die Kernfelder aufgelistet, bitte erweitern Sie die anderen!!!)


Nachdem der Server das user_token generiert hat, wird es Gibt es an den Client zurück (Speicher selbst), und der Client stellt jede Schnittstellenanforderung. Wenn für den Zugriff auf die Schnittstelle eine Benutzeranmeldung erforderlich ist, müssen user_id und user_token an den Server zurückgegeben werden. Nach Erhalt dieser beiden Parameter muss der Server Folgendes tun Folgende Schritte:

1. Ermitteln Sie die Gültigkeit der api_token-Tabellendatensätze.

3 Der Tabellendatensatz ist nicht vorhanden. Wenn der Datensatz vorhanden ist, fahren Sie mit dem nächsten Schritt fort. 4. Aktualisieren Sie die Ablaufzeit von user_token Gültigkeitsdauer ohne Löschung);

5. Schnittstellendaten zurückgeben:


Anfragemethode: POST
POST-Parameter: title=Ich bin der Titel&content=Ich bin der Inhalt
Rückgabedaten:




Wie kann man Token-Hijacking verhindern?

Es wird definitiv ein Problem des Token-Lecks geben. Wenn ich zum Beispiel Ihr Mobiltelefon bekomme und Ihren Token kopiere, kann ich mich vor Ablauf an anderer Stelle als Sie anmelden.
Eine einfache Möglichkeit, dieses Problem zu lösen
1. Verschlüsseln Sie das Token beim Speichern symmetrisch, speichern Sie es und entschlüsseln Sie es dann, wenn Sie es verwenden.
2. Kombinieren Sie die Anforderungs-URL, den Zeitstempel und das Token und fügen Sie eine Salt-Signatur hinzu, und der Server überprüft die Gültigkeit.
Der Ausgangspunkt beider Methoden ist: Es ist einfacher, Ihre gespeicherten Daten zu stehlen, aber es ist schwieriger, Ihr Programm zu zerlegen und Ihre Verschlüsselungs-, Entschlüsselungs- und Signaturalgorithmen zu hacken. Es ist jedoch eigentlich nicht schwer zu sagen, dass es schwierig ist, denn schließlich geht es darum, sich vor Herren und nicht vor Bösewichten zu schützen.

Verwandte Empfehlungen:

Instanzmethode von PHP, die Token implementiert

Detaillierte Erläuterung des Tokens in der App-Schnittstelle

So legen Sie die WeChat-Applet-URL und das Token fest

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Tokens in der PHP-Schnittstelle. 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