Coder Social home page Coder Social logo

signature-php's Introduction

Signature

A PHP 5.4+ port of the Signature ruby gem

Build Status Code Coverage Scrutinizer Code Quality

Installation

Add philipbrown/signature-php as a requirement to composer.json:

$ composer require philipbrown/signature-php

What is HMAC-SHA authentication?

HMAC-SHA authentication allows you to implement very simple key / secret authentication for your API using hashed signatures.

Making a request

use PhilipBrown\Signature\Token;
use PhilipBrown\Signature\Request;

$data    = ['name' => 'Philip Brown'];
$token   = new Token('abc123', 'qwerty');
$request = new Request('POST', 'users', $data);

$auth = $request->sign($token);

$http->post('users', array_merge($auth, $data));

Authenticating a response

use PhilipBrown\Signature\Auth;
use PhilipBrown\Signature\Token;
use PhilipBrown\Signature\Guards\CheckKey;
use PhilipBrown\Signature\Guards\CheckVersion;
use PhilipBrown\Signature\Guards\CheckTimestamp;
use PhilipBrown\Signature\Guards\CheckSignature;
use PhilipBrown\Signature\Exceptions\SignatureException;

$auth  = new Auth('POST', 'users', $_POST, [
	new CheckKey,
	new CheckVersion,
	new CheckTimestamp,
	new CheckSignature
]);

$token = new Token('abc123', 'qwerty');

try {
    $auth->attempt($token);
}

catch (SignatureException $e) {
    // return 4xx
}

Changing the default HTTP request prefix

By default, this package uses auth_* in requests. You can change this behaviour when signing and and authenticating requests:

// default, the HTTP request uses auth_version, auth_key, auth_timestamp and auth_signature
$request->sign($token);
// the HTTP request now uses x-version, x-key, x-timestamp and x-signature
$request->sign($token, 'x-');

If you changed the default, you will need to authenticate the request accordingly:

$auth->attempt($token, 'x-');

signature-php's People

Contributors

amp343 avatar gayanhewa avatar jwpage avatar kukat avatar philipbrown avatar ryan-senn avatar saadsidqui avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

signature-php's Issues

New release

Me again ;-p

Could you please publish a new release? v1.0.1 maybe?

Tag 5.1.0

The CHANGELOG lists the latest version as 5.1.0, as it introduced the new feature of being able to specify a prefix, though the currently tagged version is 5.0.1

It'd be great to have them lined up with each other ๐Ÿ˜„

Signature Not matching, wrong use of Timestamp.

Please see my fork for fixes,
During slow connection timestamps did not match as guest timestamp was compared against host timestamps when host timestamp was generated locally and used in signature generation while it should only be generated and used to compare timedifference between guest and local timestamps as allowed difference is set in in Guard/CheckTimestamp $grace.

Make Request::payload and Request::signature protected

Just thought I'd gauge your opinion on this one before I go and make a pull request.

Seems to me like Request::payload() and Request::signature() methods should both be private or (or protected). The example in the docs is something like:

$request = new Request('GET', 'users');
$request->sign(new Token('foo', 'bar'));

Since payload and signature methods aren't referenced here, they seem to be internal implementation details that the end-user of Signature shouldn't need to know about.

The "real" public API is the constructor, and the sign method.

Making these internal functions public will simplify testing and means fewer BC breaks since there'll be fewer public methods, thus allowing for greater freedom during refactoring.

Obviously this'll be another (sorry) BC break, if I turn this into a PR, bumping the release to 5.0.0. If you're on board, I'm happy to make a pull request for it. ๐Ÿ‘

Token $token param

What is this parameter for? The lack of documentation is making the use of the library hell. No offense.

Prevent storing plain text secret in database

Hi all,

Thanks for this package. I was wandering how to mannage the storing of the user key/secret. Plain text seems to be a bad idea. How do you mannage this part of the signature-php implementation in you api ?

Best regards.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.