99designs / http-signatures
签名和验证HTTP消息
4.0.0
2017-05-04 01:36 UTC
Requires
- php: >=5.5
- paragonie/random_compat: ^1.0|^2.0
- psr/http-message: ^1.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^1.11
- guzzlehttp/psr7: ^1.2
- phpunit/phpunit: ~4.8
- symfony/http-foundation: ~2.8|~3.0
- symfony/psr-http-message-bridge: ^1.0
- zendframework/zend-diactoros: ^1.1
README
PHP实现HTTP Signatures草案规范;允许对PSR7消息进行加密签名和验证。
另请参阅
- https://github.com/99designs/http-signatures-guzzlehttp
- https://github.com/99designs/http-signatures-ruby
使用方法
将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)。