PHP无状态对象,(PHP)基于Token的身份验证中对无状态的理解

假设我们设计的Token储存的信息为:

用户名.发行时间.过期时间.签名

在用户登录成功后,我们获取到用户的用户名、此时的时间戳,并将它们和我们设置的过期时间拼接在一起,组成一个字符串,假设为:

$info = 'foo.1497279169.1497379180';

然后我们根据以上信息信息生成签名(这里我们假设密钥为‘mystar’):

$signature = hash_hmac('md5',$info,'mystar');

最后我们将这两部分拼接起来,得到最终的Token字符串:

$token = $info.'.'.$signature;

此时得到的字符串为:

foo.1497279169.1497379180.8fd81e6e607d9228a6ef61e83b65e940

当用户登陆成功时,我们将此字符串储存到cookie中,那么在用户登录后,每次向服务器发送请求都会带着这个Token字符串,服务器在拿到字符串后,利用explode()函数将字符串的前三部分(即信息部分)取出,使用同样的方法拼接成一个字符串,并用hash_hmac()函数,再次对其进行加密,用加密后的字符串和签名部分做比较,如果相等,那么证明这个cookie没有被修改过,那么就成功验证了用户的合法身份。

$arr = explode('.',$_COOKIE['token']);

$info = $arr[0].'.'.$arr[1].'.'.$arr[2];

$true_signature = hash_hmac('md5',$info,'mystar');

if ($true_signature == $arr[3]){

//验证成功

}

else{

//验证失败,数据被非法修改

}

在整个验证的过程中,不需要在session或是数据库中储存任何的信息,Token本身携带了足够的信息,只需要在客户端的cookie或本地介质存储状态信息,然后用服务端的代码进行验证即可,所以说是基于Token的身份验证是无状态的。

最后,这只是最简单的思路,实际应用中$info中可以储存更多的信息,且一般需要用Base64进行编码后再进行拼接和加密(JWT)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要进行支付宝身份验证,你可以使用支付宝开放平台提供的 SDK 来实现。以下是使用 PHP 进行支付宝身份验证的简单示例代码: ```php <?php // 引入 SDK 文件 require_once 'path/to/alipay-sdk-PHP/AopSdk.php'; // 初始化 AopClient $aop = new AopClient(); $aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do'; $aop->appId = 'YOUR_APP_ID'; $aop->rsaPrivateKey = 'YOUR_RSA_PRIVATE_KEY'; $aop->format = 'json'; $aop->charset = 'UTF-8'; $aop->signType = 'RSA2'; $aop->alipayrsaPublicKey = 'ALIPAY_RSA_PUBLIC_KEY'; // 构造请求参数 $request = new AlipaySystemOauthTokenRequest(); $request->setGrantType("authorization_code"); $request->setCode("YOUR_AUTHORIZATION_CODE"); // 发起请求 $response = $aop->execute($request); // 处理返回结果 if ($response && $response->code == "10000") { // 身份验证成功,处理业务逻辑 $accessToken = $response->access_token; $userId = $response->user_id; // 其他操作... } else { // 身份验证失败,处理错误信息 echo "身份验证失败:" . $response->msg; } ?> ``` 以上代码,你需要将 `YOUR_APP_ID`、`YOUR_RSA_PRIVATE_KEY`、`ALIPAY_RSA_PUBLIC_KEY` 和 `YOUR_AUTHORIZATION_CODE` 替换为你自己的相关值。 请注意,这只是一个基本示例,实际应用可能需要根据具体的业务需求进行修改和完善。你还需要在支付宝开放平台注册应用并获取相应的密钥和权限。 此外,为了保护你的隐私和安全,建议将敏感信息(如密钥)存储在安全的地方,而不是直接写在代码

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值