What is oauth?
The 'oauth' npm package is a library that allows developers to implement OAuth authentication in their Node.js applications. OAuth is an open standard for access delegation, commonly used to grant websites or applications access to user information on other websites without giving them the passwords. This package supports both OAuth 1.0A and OAuth 2.0 protocols.
What are oauth's main functionalities?
Creating an OAuth 1.0A client
This code sample demonstrates how to create an OAuth 1.0A client for interacting with a service like Twitter. It initializes the OAuth client with the necessary endpoints and credentials.
const OAuth = require('oauth').OAuth;
let oauth = new OAuth(
'https://api.twitter.com/oauth/request_token',
'https://api.twitter.com/oauth/access_token',
'your_consumer_key',
'your_consumer_secret',
'1.0A',
null,
'HMAC-SHA1'
);
Signing OAuth 1.0A requests
This code sample shows how to sign OAuth 1.0A requests to access protected resources, such as a user's account information on Twitter. It uses the 'get' method of the OAuth client.
oauth.get(
'https://api.twitter.com/1.1/account/verify_credentials.json',
'your_access_token', // user token
'your_token_secret', // user secret
function (e, data, res) {
if (e) console.error(e);
console.log(require('util').inspect(data));
}
);
Creating an OAuth 2.0 client
This code sample demonstrates how to create an OAuth 2.0 client for interacting with a service like Google. It initializes the OAuth2 client with the necessary endpoints and credentials.
const OAuth2 = require('oauth').OAuth2;
let oauth2 = new OAuth2(
'your_client_id',
'your_client_secret',
'',
'https://accounts.google.com/o/oauth2/auth',
'https://accounts.google.com/o/oauth2/token',
null
);
Getting OAuth 2.0 access token
This code sample shows how to get an OAuth 2.0 access token using the client credentials grant type. The access token can then be used to authenticate API requests.
oauth2.getOAuthAccessToken(
'',
{'grant_type':'client_credentials'},
function (e, access_token, refresh_token, results){
console.log('bearer: ',access_token);
}
);
Other packages similar to oauth
passport
Passport is a popular authentication middleware for Node.js. Unlike 'oauth', which is specifically focused on OAuth protocols, Passport supports a wide range of authentication strategies, including OAuth, OpenID, and others. It is designed to be plugged into any Express-based web application.
simple-oauth2
Simple OAuth2 is a simplified, modular library for interacting with OAuth2 providers. It abstracts away some of the complexities of the OAuth 2.0 protocol. It's a higher-level library compared to 'oauth' and provides a more straightforward API for handling tokens and making authenticated requests.
grant
Grant is a middleware for Express, Koa, and Hapi that is designed to help you add OAuth integration to your application. It supports more than 180 providers out of the box and has a simpler configuration compared to 'oauth'. It's a good choice for those who want to support multiple OAuth providers with minimal setup.
node-oauth
A simple oauth API for node.js . This API allows users to authenticate against OAUTH providers, and thus act as OAuth consumers. It also has support for OAuth Echo, which is used for communicating with 3rd party media providers such as TwitPic and yFrog.
Tested against Twitter (http://twitter.com), term.ie (http://term.ie/oauth/example/), TwitPic, and Yahoo!
Also provides rudimentary OAuth2 support, tested against facebook, github, foursquare, google and Janrain. For more complete usage examples please take a look at connect-auth (http://github.com/ciaranj/connect-auth)
Installation
$ npm install oauth
Change History
- 0.9.8
- OAuth: Support overly-strict OAuth server's that require whitespace separating the Authorization Header parameters (e.g. 500px.com) (Thanks to Christian Schwarz)
- OAuth: Fix incorrect double-encoding of PLAINTEXT OAuth connections (Thanks to Joe Rozner)
- OAuth: Minor safety check added when checking hostnames. (Thanks to Garrick Cheung)
- 0.9.7
- OAuth2: Pass back any extra response data for calls to getOAuthAccessToken (Thanks to Tang Bo Hao)
- OAuth2: Don't force a https request if given a http url (Thanks to Damien Mathieu)
- OAuth2: Supports specifying a grant-type of 'refresh-token' (Thanks to Luke Baker)
- 0.9.6
- OAuth2: Support for 302 redirects (Thanks Patrick Negri).
- OAuth1/2: Some code tidying. ( Thanks to Raoul Millais )
- 0.9.5
- OAuth1: Allow usage of HTTP verbs other than GET for retrieving the access and request tokens (Thanks to Raoul Millais)
- 0.9.4
- OAuth1/2: Support for OAuth providers that drop connections (don't send response lengths? [Google])
- OAuth2: Change getOAuthAccessToken to POST rather than GET ( Possible Breaking change!!! ... re-tested against Google, Github, Facebook, FourSquare and Janrain and seems ok .. is closer to the spec (v20) )
- 0.9.3
- OAuth1: Adds support for following 301 redirects (Thanks bdickason)
- 0.9.2
- OAuth1: Correct content length calculated for non-ascii post bodies (Thanks selead)
- OAuth1: Allowed for configuration of the 'access token' name used when requesting protected resources (OAuth2)
- 0.9.1
- OAuth1: Added support for automatically following 302 redirects (Thanks neyric)
- OAuth1: Added support for OAuth Echo (Thanks Ryan LeFevre).
- OAuth1: Improved handling of 2xx responses (Thanks Neil Mansilla).
- 0.9.0
- OAuth1/2: Compatibility fixes to bring node-oauth up to speed with node.js 0.4x [thanks to Rasmus Andersson for starting the work ]
- 0.8.4
- OAuth1: Fixed issue #14 (Parameter ordering ignored encodings).
- OAuth1: Added support for repeated parameter names.
- OAuth1/2: Implements issue #15 (Use native SHA1 if available, 10x speed improvement!).
- OAuth2: Fixed issue #16 (Should use POST when requesting access tokens.).
- OAuth2: Fixed Issue #17 (OAuth2 spec compliance).
- OAuth1: Implemented enhancement #13 (Adds support for PUT & DELETE http verbs).
- OAuth1: Fixes issue #18 (Complex/Composite url arguments [thanks novemberborn])
- 0.8.3
- OAuth1: Fixed an issue where the auth header code depended on the Array's toString method (Yohei Sasaki) Updated the getOAuthRequestToken method so we can access google's OAuth secured methods. Also re-implemented and fleshed out the test suite.
- 0.8.2
- OAuth1: The request returning methods will now write the POST body if provided (Chris Anderson), the code responsible for manipulating the headers is a bit safe now when working with other code (Paul McKellar)
- Package: Tweaked the package.json to use index.js instead of main.js
- 0.8.1
- OAuth1: Added mechanism to get hold of a signed Node Request object, ready for attaching response listeners etc. (Perfect for streaming APIs)
- 0.8.0
- OAuth1: Standardised method capitalisation, the old getOauthAccessToken is now getOAuthAccessToken (Breaking change to existing code)
- 0.7.7
- OAuth1: Looks like non oauth_ parameters where appearing within the Authorization headers, which I believe to be incorrect.
- 0.7.6
- OAuth1: Added in oauth_verifier property to getAccessToken required for 1.0A
- 0.7.5
- Package: Added in a main.js to simplify the require'ing of OAuth
- 0.7.4
- OAuth1: Minor change to add an error listener to the OAuth client (thanks troyk)
- 0.7.3
- OAuth2: Now sends a Content-Length Http header to keep nginx happy :)
- 0.7.2
- OAuth1: Fixes some broken unit tests!
- 0.7.0
- OAuth1/2: Introduces support for HTTPS end points and callback URLS for OAuth 1.0A and Oauth 2 (Please be aware that this was a breaking change to the constructor arguments order)
Contributors (In no particular order)