php 公钥 签名,使用PHP中的RSA公钥验证JWT签名

// File test.php

require_once __DIR__.'/vendor/autoload.php';

use Jose\Checker\ExpirationChecker;

use Jose\Checker\IssuedAtChecker;

use Jose\Checker\NotBeforeChecker;

use Jose\Factory\KeyFactory;

use Jose\Factory\LoaderFactory;

use Jose\Factory\VerifierFactory;

use Jose\Object\JWKSet;

use Jose\Object\JWSInterface;

// We create a JWT loader.

$loader = LoaderFactory::createLoader();

// We load the input

$jwt = $loader->load($input);

if (!$jws instanceof JWSInterface) {

die('Not a JWS');

}

// Please note that at this moment the signature and the claims are not verified

// To verify a JWS, we need a JWKSet that contains public keys (from RSA key in your case).

// We create our key object (JWK) using a RSA public key

$jwk = KeyFactory::createFromPEM('-----BEGIN RSA PUBLIC KEY-----...');

// Then we set this key in a keyset (JWKSet object)

// Be careful, the JWKSet object is immutable. When you add a key, you get a new JWKSet object.

$jwkset = new JWKSet();

$jwkset = $jwkset->addKey($jwk);

// We create our verifier object with a list of authorized signature algorithms (only 'RS512' in this example)

// We add some checkers. These checkers will verify claims or headers.

$verifier = VerifierFactory::createVerifier(

['RS512'],

[

new IssuedAtChecker(),

new NotBeforeChecker(),

new ExpirationChecker(),

]

);

$is_valid = $verifier->verify($jws, $jwkset);

// The variable $is_valid contains a boolean that indicates the signature is valid or not.

// If a claim is not verified (e.g. the JWT expired), an exception is thrown.

//Now you can use the $jws object to retreive all claims or header key/value pairs

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值