80 lines
1.6 KiB
Markdown
80 lines
1.6 KiB
Markdown
# node-http-signature
|
|
|
|
node-http-signature is a node.js library that has client and server components
|
|
for Joyent's [HTTP Signature Scheme](http_signing.md).
|
|
|
|
## Usage
|
|
|
|
Note the example below signs a request with the same key/cert used to start an
|
|
HTTP server. This is almost certainly not what you actually want, but is just
|
|
used to illustrate the API calls; you will need to provide your own key
|
|
management in addition to this library.
|
|
|
|
### Client
|
|
|
|
```js
|
|
var fs = require('fs');
|
|
var https = require('https');
|
|
var httpSignature = require('http-signature');
|
|
|
|
var key = fs.readFileSync('./key.pem', 'ascii');
|
|
|
|
var options = {
|
|
host: 'localhost',
|
|
port: 8443,
|
|
path: '/',
|
|
method: 'GET',
|
|
headers: {}
|
|
};
|
|
|
|
// Adds a 'Date' header in, signs it, and adds the
|
|
// 'Authorization' header in.
|
|
var req = https.request(options, function(res) {
|
|
console.log(res.statusCode);
|
|
});
|
|
|
|
|
|
httpSignature.sign(req, {
|
|
key: key,
|
|
keyId: './cert.pem'
|
|
});
|
|
|
|
req.end();
|
|
```
|
|
|
|
### Server
|
|
|
|
```js
|
|
var fs = require('fs');
|
|
var https = require('https');
|
|
var httpSignature = require('http-signature');
|
|
|
|
var options = {
|
|
key: fs.readFileSync('./key.pem'),
|
|
cert: fs.readFileSync('./cert.pem')
|
|
};
|
|
|
|
https.createServer(options, function (req, res) {
|
|
var rc = 200;
|
|
var parsed = httpSignature.parseRequest(req);
|
|
var pub = fs.readFileSync(parsed.keyId, 'ascii');
|
|
if (!httpSignature.verifySignature(parsed, pub))
|
|
rc = 401;
|
|
|
|
res.writeHead(rc);
|
|
res.end();
|
|
}).listen(8443);
|
|
```
|
|
|
|
## Installation
|
|
|
|
npm install http-signature
|
|
|
|
## License
|
|
|
|
MIT.
|
|
|
|
## Bugs
|
|
|
|
See <https://github.com/joyent/node-http-signature/issues>.
|