Sto lavorando su api REST
utilizzando NodeJS
. Per l'autenticazione ho deciso di utilizzare Passport
. Voglio davvero api RESTful. Quindi significa che devo usare i token invece delle sessioni.Autenticazione REST NodeJS utilizzando Passport e OAuth2 + social network
Desidero consentire agli utenti di accedere utilizzando nome utente e password o utilizzando i social network come Facebook, Google e Twitter.
Realizzo il mio server OAuth2.0
per l'emissione di Access
e Refresh tokens
utilizzando il modulo oauth2orize
. Così ora posso registrare un nuovo utente e poi rilasciargli token. Ho seguito questo tutorial:
http://aleksandrov.ws/2013/09/12/restful-api-with-nodejs-plus-mongodb/
Verifica utente per percorso:
// api ------------------------------------------------------------------------------------
app.get('/api/userInfo',
passport.authenticate('bearer', { session: false }),
function(req, res) {
// req.authInfo is set using the `info` argument supplied by
// `BearerStrategy`. It is typically used to indicate scope of the token,
// and used in access control checks. For illustrative purposes, this
// example simply returns the scope in the response.
res.json({ user_id: req.user.userId, name: req.user.username, scope: req.authInfo.scope })
}
);
Tutto questo funziona abbastanza bene. Sfortunatamente non so come implementare l'autenticazione sociale.
Stavo leggendo questo tutorial:
http://scotch.io/tutorials/javascript/easy-node-authentication-facebook
Ma in questo tutorial non stanno facendo un'API RESTful veramente. Ho già implementato lo schema utente secondo questo tutorial in cui i token per l'utente locale sono memorizzati in modelli separati.
// define the schema for our user model
var userSchema = mongoose.Schema({
local: {
username: {
type: String,
unique: true,
required: true
},
hashedPassword: {
type: String,
required: true
},
created: {
type: Date,
default: Date.now
}
},
facebook: {
id: String,
token: String,
email: String,
name: String
},
twitter: {
id: String,
token: String,
displayName: String,
username: String
},
google: {
id: String,
token: String,
email: String,
name: String
}
});
Ma ora, come posso verificare l'utente?
passport.authenticate('bearer', { session: false }),
questo sta verificando unico segno portatore contro al mio db, ma come posso verificare gettoni sociali? Mi sto perdendo qualcosa?
si può elaborare come in ultima analisi, ha risolto questo? Puoi anche lasciare il tuo account Twitter dietro per ulteriore corrispondenza. Grazie :) –
e invece del tutorial di aleksandrov, perché non è possibile utilizzare il passport-oauth? http://passportjs.org/guide/oauth/ –
Anche perché implementare oAuth per il tuo server? perché non usare passaporto-locale e poi emettere token con una strategia al portatore? –