php jwt通用算法

博客内容涉及使用PHP实现JWT(JSON Web Tokens)的生成与验证。通过JwtAuthServices.php类进行操作,调用方和被调用方共享一个secret进行签名验证。在多调用方场景下,JWT的payload中添加appKey字段来区分不同业务方,被调用方据此获取相应secret进行签名校验。
摘要由CSDN通过智能技术生成

JWT生成&验证类

JwtAuthServices.php

<?php
/**
 * jwt生成&验证
 * @author 
 * @date 2021-07-28
 */
class JwtAuthServices{
    // 算法
    const ALG_MAPS  = [
        'HS256'=>'sha256'
    ];

    /*
     * 生成jwt
     *@param  array header
     *@param  array payload
     *@param  string secret
     *@return string token
     */
    public static function getToken(array $header, array $payload, string $secret) {
        $base64header  = self::base64UrlEncode(json_encode($header,JSON_UNESCAPED_UNICODE));
        $base64payload = self::base64UrlEncode(json_encode($payload,JSON_UNESCAPED_UNICODE));
        $alg = $header['alg'] ?? 'HS256';
        return sprintf('%s.%s.%s', $base64header, $base64payload, self::signature($base64header . '.' . $base64payload, $secret, $alg));
    }

    /*
     * 解析jwt
     *@param  string jwt
     *@param  stri
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JWT(JSON Web Token)是一种用于在网络应用之间安全传输信息的开放标准。它由三个部分组成:标头(Header)、有效载荷(Payload)和签名(Signature)。JWT的签名算法有多种选择,其中包括一些自定义的签名算法。 一种自定义的签名算法是基于EdDSA(Edwards-curve Digital Signature Algorithm)的确定性签名。使用EdDSA签名的JWT具有确定性签名,这意味着相同的JWT标头和有效负载将始终生成相同的签名。这种算法解决了依赖随机nonce值来保护私钥的问题,并且被一些JOSE和JWT的批评者推荐。 另一种自定义的签名算法是基于RSASSA-PKCS1-v1_5的确定性签名。也就是说,使用RSASSA-PKCS1-v1_5签名的JWT具有确定性签名,相同的JWT标头和有效负载将始终生成相同的签名。 此外,还有一种自定义的签名算法是基于ECDSA(Elliptic Curve Digital Signature Algorithm)的概率签名。使用ECDSA签名的JWT具有概率性签名,这意味着相同的JWT标头和有效负载将生成不同的签名。然而,ECDSA的随机生成对签名的安全性至关重要。 总结起来,JWT的自定义签名算法包括确定性签名算法(如EdDSA和RSASSA-PKCS1-v1_5)和概率性签名算法(如ECDSA)。根据具体的安全需求和性能要求,可以选择不同的签名算法来保护JWT的完整性和安全性。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值