4
0

Wsse.php 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. <?php
  2. namespace Http\Message\Authentication;
  3. use Http\Message\Authentication;
  4. use Psr\Http\Message\RequestInterface;
  5. /**
  6. * Authenticate a PSR-7 Request using WSSE.
  7. *
  8. * @author Márk Sági-Kazár <mark.sagikazar@gmail.com>
  9. */
  10. final class Wsse implements Authentication
  11. {
  12. /**
  13. * @var string
  14. */
  15. private $username;
  16. /**
  17. * @var string
  18. */
  19. private $password;
  20. /**
  21. * @param string $username
  22. * @param string $password
  23. */
  24. public function __construct($username, $password)
  25. {
  26. $this->username = $username;
  27. $this->password = $password;
  28. }
  29. /**
  30. * {@inheritdoc}
  31. */
  32. public function authenticate(RequestInterface $request)
  33. {
  34. // TODO: generate better nonce?
  35. $nonce = substr(md5(uniqid(uniqid().'_', true)), 0, 16);
  36. $created = date('c');
  37. $digest = base64_encode(sha1(base64_decode($nonce).$created.$this->password, true));
  38. $wsse = sprintf(
  39. 'UsernameToken Username="%s", PasswordDigest="%s", Nonce="%s", Created="%s"',
  40. $this->username,
  41. $digest,
  42. $nonce,
  43. $created
  44. );
  45. return $request
  46. ->withHeader('Authorization', 'WSSE profile="UsernameToken"')
  47. ->withHeader('X-WSSE', $wsse)
  48. ;
  49. }
  50. }