Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Problems with OAuth on node.js

Tags:

I am trying to get OAuth to work on node.js. I found this in the documentation of node-oauth:

var OAuth= require('oauth').OAuth; var oa = new OAuth(requestUrl,accessUrl,consumerKey,consumerSecret,"1.0A",responseUrl,"HMAC-SHA1"); 

The next step in the official tutorial says:

"Then get hold of a valid access token + access token secret as per the normal channels"

What are these "normal channels"?

I know that the user has to authenticate somehow on the "vendor" site and that by some way a response url is called, but I can't find a description how to implement this. Can someone enlighten me?

like image 663
Thomas Avatar asked Mar 25 '11 05:03

Thomas


People also ask

What is OAuth in Nodejs?

OAuth2 is an authentication protocol that is used to authenticate and authorize users in an application by using another service provider. This post will go through how to build a Node. js application to implement the OAuth2 protocol. If you just want to see the code, you can view it here.

What is OAuth JavaScript?

This document explains how to implement OAuth 2.0 authorization to access Google APIs from a JavaScript web application. OAuth 2.0 allows users to share specific data with an application while keeping their usernames, passwords, and other information private.

What does it mean if an API requires OAuth?

OAuth is a delegated authorization framework for REST/APIs. It enables apps to obtain limited access (scopes) to a user's data without giving away a user's password. It decouples authentication from authorization and supports multiple use cases addressing different device capabilities.


1 Answers

I'm not sure what OAuth service you are trying to connect to so I'll just use twitter as an example. After you create your OAuth object you need to first request an oauth token. When you get that token, then you need to redirect to, for twitter, their authenticate page which either prompts them to login, then asks if it's ok for the app to login.

oa.getOAuthRequestToken(function(error, oauth_token, oauth_token_secret, results){   if (error) new Error(error.data)   else {     req.session.oauth.token = oauth_token     req.session.oauth.token_secret = oauth_token_secret     res.redirect('https://twitter.com/oauth/authenticate?oauth_token='+oauth_token)    } }); 

When you first created the OAuth object, you set a responseURL, or the callback url. It can be anything, for my app its just /oauth/callback. In that callback you receive the oauth verifier token. You then use both the oauth request token and oauth verifier token to request the access tokens. When you receive the access tokens you will also receive anything else they pass, like their username.

app.get('/oauth/callback', function(req, res, next){   if (req.session.oauth) {     req.session.oauth.verifier = req.query.oauth_verifier     var oauth = req.session.oauth      oa.getOAuthAccessToken(oauth.token,oauth.token_secret,oauth.verifier,        function(error, oauth_access_token, oauth_access_token_secret, results){         if (error) new Error(error)         console.log(results.screen_name)     }   ); } else   next(new Error('No OAuth information stored in the session. How did you get here?')) }); 

Hope this helps! I had the same problems when I started on this.

like image 99
mattmcmanus Avatar answered Sep 24 '22 04:09

mattmcmanus