99designs/http-signatures

签名和验证HTTP消息

4.0.0 2017-05-04 01:36 UTC

README

PHP实现HTTP Signatures草案规范;允许对PSR7消息进行加密签名和验证。

另请参阅

使用方法

99designs/http-signatures添加到您的composer.json文件中。

配置一个上下文,包含您的算法、密钥和要签名的头部。这最好放在应用程序启动文件中。

use HttpSignatures\Context;

$context = new Context([
  'keys' => ['examplekey' => 'secret-key-here'],
  'algorithm' => 'hmac-sha256',
  'headers' => ['(request-target)', 'Date', 'Accept'],
]);

如果keys哈希中只有一个密钥,则将用于签名。否则,通过'signingKeyId' => 'examplekey'指定一个。

消息

假设消息是一个PSR-7兼容的请求或响应对象。

签名消息

$context->signer()->sign($message);

现在$message包含签名头部

$message->headers->get('Signature');
// keyId="examplekey",algorithm="hmac-sha256",headers="...",signature="..."

$message->headers->get('Authorization');
// Signature keyId="examplekey",algorithm="hmac-sha256",headers="...",signature="..."

验证已签名的消息

$context->verifier()->isValid($message); // true or false

Symfony兼容性

Symfony请求会规范化查询字符串,这意味着生成的请求目标可能不正确。请参阅symfony/psr-http-message-bridge#30

在创建PSR-7请求时,您使用withRequestTarget来确保请求目标是正确的。例如

use Symfony\Bridge\PsrHttpMessage\Factory\DiactorosFactory;
use Symfony\Component\HttpFoundation\Request;

$symfonyRequest = Request::create('/foo?b=1&a=2');
$psrRequest = (new DiactorosFactory())
	->createRequest($symfonyRequest)
	->withRequestTarget($symfonyRequest->getRequestUri());

贡献

欢迎提交拉取请求。

许可

HTTP Signatures遵循MIT许可证(MIT)