接口安全一:jwt

认证协议:认证客户端的合法性;

授权协议:认证身份后对受限资源访问的控制;

JWT(json web token)是实现认证协议的一种框架,原理如下:

用户提供用户名和密码给认证服务器,服务器验证用户提交信息信息的合法性;如果验证成功,会产生并返回一个Token(令牌),用户可以使用这个token访问服务器上受保护的资源。

Token由3部分组成:header.claims.signature,

其中header包括认证类型(JWT)和生成token使用的算法;

claims是token的核心,主要包括用户可公开的信息,eg:用户名、手机号;

signature签名:保障header和claims信息不被篡改,实现方式是后台会定义一个私钥,基于一定的规则和算法对header和claims信息进行加密得到signature,在服务端验证合法后可以基于token获取claims里面的信息(用户信息)。

使用场景:

1 无状态的分布式API:JWT的主要优势在于使用无状态、可扩展的方式处理应用中的用户会话;服务端可以通过token方便的获取用户的会话信息,而不需要去访问数据库,在分布式应用中非常实用;

缺点是:无法实现黑名单的token刷新

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PHP JWT 接口安全示例: 1. 首先需要安装 JWT 扩展包,如果使用 composer 可以在命令行中输入 "composer require firebase/php-jwt" 来安装。 2. 生成 JWT 令牌: ``` <?php require_once "vendor/autoload.php"; use \Firebase\JWT\JWT; $secret_key = "YOUR_SECRET_KEY"; $issuer_claim = "THE_ISSUER"; $audience_claim = "THE_AUDIENCE"; $issuedat_claim = time(); // issued at $notbefore_claim = $issuedat_claim + 10; //not before in seconds $expire_claim = $issuedat_claim + 60; // expire time in seconds $token = array( "iss" => $issuer_claim, "aud" => $audience_claim, "iat" => $issuedat_claim, "nbf" => $notbefore_claim, "exp" => $expire_claim, "data" => array( "user_id" => "1", "user_name" => "John Doe", ) ); $jwt = JWT::encode($token, $secret_key); echo $jwt; ``` 3. 验证 JWT 令牌: ``` <?php require_once "vendor/autoload.php"; use \Firebase\JWT\JWT; $secret_key = "YOUR_SECRET_KEY"; $jwt = "YOUR_JWT_TOKEN"; try { $decoded = JWT::decode($jwt, $secret_key, array('HS256')); print_r($decoded); } catch (\Firebase\JWT\ExpiredException $e) { echo json_encode(array( "status" => $e->getStatusCode(), "message" => $e->getMessage() )); } catch (\Firebase\JWT\SignatureInvalidException $e) { echo json_encode(array( "status" => $e->getStatusCode(), "message" => $e->getMessage() )); } catch (\Firebase\JWT\BeforeValidException $e) { echo json_encode(array( "status" => $e->getStatusCode(), "message" => $e->getMessage() )); } catch (\Firebase\JWT\InvalidArgumentException $e) { echo json_encode(array( "status" => $e->getStatusCode(), "message" => $e->getMessage() )); } catch (\Exception $e) { echo json_encode(array( "status" => $e->getStatusCode(), "message" => $e->getMessage()

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值