Ich habe versucht, einen RESTful-API-Dienst zu erstellen. Ich habe ein Token generiert, indem ich eine Zeichenfolge (mit einem zufällig generierten geheimen Schlüssel, der in der Datenbank gespeichert ist), der vom Login-Skript bei erfolgreicher Anmeldung zurückgegeben wird, zum Client-Ende als Teil eines JSON-Objekts hash. Der Client übergibt das Token (zusammen mit einigen anderen Feldern als JSON-Objekt) als GET/POST-Parameter, um Zugriff auf die anderen API-Services zu erhalten. Es scheint jedoch, dass wenn die Token-Zeichenfolge als JSON-Objekt übergeben wird, die Zeichenfolge irgendwo in der Mitte geändert wird, und die Enthashung mit dem geheimen Schlüssel am Überprüfungsendpunkt nicht die gleiche Zeichenfolge wie die Zeichenfolge, die gehashed wurde. Das Ergebnis ist ein erfolgloser Versuch, die Daten durch das Token zu sichern.Senden eines Hash-Tokens als GET-Parameter
Ich addiere Teile des Codes, die relevant sind:
Anmeldeskript
$secret = newsecret($rand);
$token = newtoken($secret, $str);
$qry1 = "UPDATE user_master set user_secret='".$secret."' where user_code='".$uid."'";
$res1 = mysqli_query($conn, $qry1);
$outdata = array("status" => "success", "username" => $un, "uid" => $uid, "token" => $token);
header('Content-type: application/json');
echo json_encode($outdata);
Client-JS
$.post("http://www.ckoysolutions.com/apis/login.php", inputs).done(function(data){
if(data.status=="success") {
var inputs = '{ '
+'"uid" : "'+data.uid+'" , '
+'"token" : "'+data.token+'"'
+' }';
window.location='http://hasconpanel.ckoysolutions.com/hasconpanel.php?inputs='+inputs;
}
else {
alert(data.message);
}
});
Weitergeleitet Seite (http://hasconpanel.ckoysolutions.com/hasconpanel.php) sendet Token als Json als Curl Postfield für Überprüfung
if(isset($inputs->uid) && isset($inputs->token)) {
$token = $inputs->token;
$uid = $inputs->uid;
$auth_data = array("uid" => $uid, "token" => $token);
$auth_json = json_encode($auth_data);
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => 1,
CURLOPT_POSTFIELDS => $auth_json,
CURLOPT_URL => "http://www.ckoysolutions.com/apis/authuser.php",
CURLOPT_HTTPHEADER => [
'Content-Type: application/json'
]
]);
$result = curl_exec($curl);
curl_close($curl);
echo $result;
}
Funktion in http://www.ckoysolutions.com/apis/authuser.php zur Authentifizierung
$row = mysqli_fetch_array($res);
$secret = $row['user_secret'];
$token = $token;
$un = $row['user_name'];
$words = explode(" ",$un);
$fn = $words[0];
$udetails = $row['user_log'];
$udetails = json_decode($udetails);
$uip = $udetails->ip;
$date_time = $udetails->time;
$str = $date_time.$fn.$uip;
$chkstr = decrypt($secret, $token);
if($str == $chkstr) {
$outdata = array("status" => "success");
mysqli_close($conn);
}
else {
$outdata = array("status" => "failure");
mysqli_close($conn);
}
header('Content-type: application/json');
echo json_encode($outdata);
Bitte legen nahe, was man hier falsch gehen.
Was Sie tun, ist das gleiche Konzept wie JWT (JSON Web Token). Es gibt viele Librairies für diese https://github.com/firebase/php-jwt vielleicht sollten Sie sie anschauen – Treast
@Treast .. Eigentlich habe ich die Idee von JWT, und beschloss, etwas ähnliches zu tun. Es schien sehr sicher zu sein. Und danke, ich schaue mir das an.: D –