我正在開發一個應用程序,其中我想將Oauth2orize作爲Oauth服務器部署到使用資源所有者密碼方式進行認證的移動客戶端。但我無法理解流量應該如何。我搜索了很多例子,但是找不到使用它的地方。在Oauth2orize模塊中使用資源所有者密碼
該流程應該給客戶端一個令牌?
我正在開發一個應用程序,其中我想將Oauth2orize作爲Oauth服務器部署到使用資源所有者密碼方式進行認證的移動客戶端。但我無法理解流量應該如何。我搜索了很多例子,但是找不到使用它的地方。在Oauth2orize模塊中使用資源所有者密碼
該流程應該給客戶端一個令牌?
這有點晚了,但我認爲這篇文章可以幫助別人。我只花了一個星期的時間試圖實現這個功能,因爲oauth2orize將樣本中的所有oauth流混合到一個文件中,因此很難弄清楚使用哪一個來獲得所需的結果。
要開始回答你的問題,你可以詢問資源所有者密碼授權,如here所述。這應該讓您在由oauth2定義的步驟方面領先一步,爲令牌和可選的刷新令牌交換用戶名(或電子郵件)和密碼。
第1步:客戶端請求使用的用戶名和密碼來授權服務器令牌
步驟2:授權服務器發出的令牌給客戶,如果客戶端具有有效憑據
因此,您開始以application/x-www-form-urlencoded格式向包含用戶名,密碼和grant_type參數的認證資源發送請求,您可以選擇使用範圍。 Oauth2orize提供server.token()
函數,該函數生成一箇中間件來解析此請求。
app.post('/token', server.token(), server.errorHandler());
但在此階段之前,您應該創建並配置服務器。我通常使用不同的文件並使用module.exports將中間件傳遞迴應用程序。
authorization.js文件
// Create the server
var server = oauth2orize.createServer();
// Setup the server to exchange a password for a token
server.exchange(oauth2orize.exchange.password(function (client, username, password, scope, done) {
// Find the user in the database with the requested username or email
db.users.find({ username: username }).then(function (user) {
// If there is a match and the passwords are equal
if (user && cryptolib.compare(password, user.password)) {
// Generate a token
var token = util.generatetoken();
// Save it to whatever persistency you are using
tokens.save(token, user.id);
// Return the token
return done(null, /* No error*/
token, /* The generated token*/
null, /* The generated refresh token, none in this case */
null /* Additional properties to be merged with the token and send in the response */
);
} else {
// Call `done` callback with false to signal that authentication failed
return done(null, false);
}
}).catch(function (err) {
// Signal that there was an error processing the request
return done(err, null);
})
};
// Middlewares to export
module.exports.token = [
server.token(),
server.errorHandler()
];
在您的應用程序之後,你寫這樣的事情
var auth = require('./authorization');
app.post('/token', auth.token);
這是你怎麼做一個基本的例子。此外,您應該在此端點上啓用某種保護。您可以使用passport-oauth2-client-password模塊使用客戶端憑證驗證。這樣,oauth2orize.exchange.password
函數中的client
變量將包含有關試圖訪問資源的客戶端的信息,從而爲授權服務器啓用額外的安全檢查。
同樣在這裏,我有點了解oauth2orize的用法 – Luc