💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 配置 为了简化库的设置,jwt提供了类`Lcobucci\JWT\Configuration`. 它的目的是: * 配置要使用的默认算法(签名者)和密钥 * 配置默认的验证约束集 * 为[扩展点提供自定义实现 * 检索组件(编码器、解码器、解析器、验证器和构建器) ## 用法 为了使用它,您必须: 1. 初始化配置对象 2. 自定义配置对象 3. 检索组件 ### 配置初始化 该`Lcobucci\JWT\Signer\Key\InMemory`对象用于对称/非对称签名。 要初始化它,您可以将关键内容作为纯文本传递: ~~~php use Lcobucci\JWT\Signer\Key\InMemory; $key = InMemory::plainText('my-key-as-plaintext'); ~~~ 提供一个 base64 编码的字符串: ~~~php use Lcobucci\JWT\Signer\Key\InMemory; $key = InMemory::base64Encoded('YSB2ZXJ5IGxvbmcgYSB2ZXJ5IHVsdHJhIHNlY3VyZSBrZXkgZm9yIG15IGFtYXppbmcgdG9rZW5z'); ~~~ 或者提供一个文件路径: ~~~php use Lcobucci\JWT\Signer\Key\InMemory; use Lcobucci\JWT\Signer\Key\LocalFileReference; $key = InMemory::file(__DIR__ . '/stored.pem'); // 这将读取文件并将其内容保留在内存中 $key = LocalFileReference::file(__DIR__ . '/stored.pem'); // 这只是保留对文件的引用 ~~~ #### 对于对称算法 对称算法使用相同的密钥进行签名创建和验证。这意味着您的密钥**保持机密**非常重要。 **建议您使用具有大量熵的密钥,最好使用加密安全的伪随机数生成器 (CSPRNG) 生成。您可以使用[CryptoKey](https://github.com/AndrewCarterUK/CryptoKey)工具为您执行此操作。** ~~~php use Lcobucci\JWT\Configuration; use Lcobucci\JWT\Signer\Hmac\Sha256; use Lcobucci\JWT\Signer\Key\InMemory; $configuration = Configuration::forSymmetricSigner( //您可以使用任何HMAC变体(256、384和512) new Sha256(), // 用您自己的密钥替换下面的值! InMemory::base64Encoded('mBC5v1sOKVvbdEitdSBenu59nfNfhwkedkJVNabosTw=') // 您还可以通过在此处提供额外参数来覆盖JOSE编码器/解码器 ); ~~~ #### 对于非对称算法 非对称算法使用**私钥**创建签名,使用**公钥**进行验证。这意味着可以分发您的**public key**。但是,**私钥**应该**保密**。 ~~~php use Lcobucci\JWT\Configuration; use Lcobucci\JWT\Signer; use Lcobucci\JWT\Signer\Key\LocalFileReference; use Lcobucci\JWT\Signer\Key\InMemory; $configuration = Configuration::forAsymmetricSigner( // 您可以在Curve25519上使用RSA或ECDSA及其所有变体(256、384和512)和EdDSA new Signer\Rsa\Sha256(), LocalFileReference::file(__DIR__ . '/private.pem'), InMemory::base64Encoded('mBC5v1sOKVvbdEitdSBenu59nfNfhwkedkJVNabosTw=') // 您还可以通过在此处提供额外参数来覆盖JOSE编码器/解码器 ); ~~~ ## *提示* ECDSA 算法的实现具有构造函数依赖性。使用`create()`命名构造函数来避免处理它(例如:)`Lcobucci\JWT\Signer\Ecdsa\Sha256::create()`。 #### 对于没有算法 警告 **不**建议将此配置类型用于生产环境。它只是为了让人们可以更简单、更快速地设置测试,避免任何类型的签名创建/验证。 ~~~php use Lcobucci\JWT\Configuration; $configuration = Configuration::forUnsecuredSigner( // 你还可以通过在此处提供额外参数来覆盖JOSE编码器/解码器 ); ~~~ ### 定制 通过使用 的设置器,`Lcobucci\JWT\Configuration`您可以自定义此库的设置。 重要的 如果您想使用自定义配置,请确保在调用任何 getter 之前调用 setter。否则,将使用默认实现。 这些是可用的 setter: * `Lcobucci\JWT\Configuration#setBuilderFactory()`: 配置令牌构建器的创建方式 * `Lcobucci\JWT\Configuration#setParser()`:配置自定义令牌解析器 * `Lcobucci\JWT\Configuration#setValidator()`: 配置自定义验证器 * `Lcobucci\JWT\Configuration#setValidationConstraints()`: 配置默认的验证约束集 ### 检索组件 完成所有必要的配置后,您可以在代码周围传递配置对象并使用 getter 来检索组件: 这些是可用的吸气剂: * `Lcobucci\JWT\Configuration#builder()`:检索令牌构建器(始终创建新实例) * `Lcobucci\JWT\Configuration#parser()`: 检索令牌解析器 * `Lcobucci\JWT\Configuration#signer()`: 检索签名者 * `Lcobucci\JWT\Configuration#signingKey()`: 检索创建签名的密钥 * `Lcobucci\JWT\Configuration#verificationKey()`: 检索签名验证的密钥 * `Lcobucci\JWT\Configuration#validator()`: 检索令牌验证器 * `Lcobucci\JWT\Configuration#validationConstraints()`: 检索默认的验证约束集