You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					80 lines
				
				1.6 KiB
			
		
		
			
		
	
	
					80 lines
				
				1.6 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								# 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>.
							 |