-
您的客户机(使用公钥),从服务器请求令牌,令牌检查密钥是否有效且未列入黑名单(如果旧密钥被泄露,您可以将其过期/列入黑名单)
-
每次都发送令牌
-
-
有一个变量,名为“myu client”,值为true
-
-
如果标头中有“my\ u client”变量,则仅服务器提供服务器信息
这种方法的缺点是,这并不是真正安全的,因为每个人都可以看到他们提出的请求。因此可以注意到这个额外的信息。
它是如此简单,你可以写一分钟,就像一个测试。
<?php
if(!$_SERVER['HTTP_MY_CLIENT']){
header("HTTP/1.1 403 FORBIDEN");
}
所以这个概念是:
客户->请求随机值
客户机/设置每个请求头中的值/
客户->向服务器发出请求。
<?php
/* A basic API token and authentication class. */
class SimpleToken
{
/* Creates a salt based on the passed key that is good for the current day */
public static function generateSalt($key)
{
return md5($key . date('Y-m-d'));
}
/* Crytographically combine the key and the salt to produce a token */
public static function generateToken($key, $content)
{
$package = $content . $key;
return crypt($package);
}
/* Generate a relatively strong SSL key */
public static function generateKey()
{
$config = array(
"digest_alg" => "sha512",
"private_key_bits" => 4096,
"private_key_type" => OPENSSL_KEYTYPE_RSA,
);
//Create a private key
$res = openssl_pkey_new($config);
//Extract the private part of the key
openssl_pkey_export($res, $private_key);
//Shorten it up for use in an API
return md5($private_key);
}
/* Verify the authenticity of the passed key/token pair */
public static function isAuthentic($key, $content, $token)
{
$package = $content . $key;
if(crypt($package, $token) == $token)
{
return true;
}
else
{
return false;
}
}
}