成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Node.JS, Mongoose和Jade搭建OAuth2服務器

開發 前端
Papers是一項論文數據庫移動應用,有iOS和Android版本。寫論文的同學們會很需要,關于它的介紹,請看開發者的官方博客。http://blog.papersapp.com/oauth-server-in-node-js/

今天我們來看一個Node.JS的實際應用。這是國外的Paper應用開發者所搭建的OAuth2服務器,使用的主要技術包括:

- Node.JS 的Express框架

- Mongoose工具集,Mongodb的一個流行庫,方便建立模型。

- bcrypt,用于密碼加密

- superagent,用于測試

Papers是一項論文數據庫移動應用,有iOS和Android版本。寫論文的同學們會很需要,關于它的介紹,請看開發者的官方博客。http://blog.papersapp.com/oauth-server-in-node-js/

雖然Papers并不是開源的,但是作者已經把寫好的node-oauth2-server模塊以及Papers的認證過程一起打包放在了GitHub上,我們可以下載研究:

https://github.com/mekentosj/oauth2-example

在代碼中的Models目錄下,我們可以清楚的看到Model的Schema定義。從這里,我們可以明白OAuth2的需要處理的主要數據結構,包括access_token, refresh_token, oauth_client.

  1. var OAuthAccessTokensSchema = new Schema({  
  2.   accessToken: { type: String, required: true, unique: true },  
  3.   clientId: String,  
  4.   userId: { type: String, required: true },  
  5.   expires: Date  
  6. });  
  7.  
  8. var OAuthRefreshTokensSchema = new Schema({  
  9.   refreshToken: { type: String, required: true, unique: true },  
  10.   clientId: String,  
  11.   userId: { type: String, required: true },  
  12.   expires: Date  
  13. });  
  14.  
  15. var OAuthClientsSchema = new Schema({  
  16.   clientId: String,  
  17.   clientSecret: String,  
  18.   redirectUri: String  
  19. });  
  20.  
  21. var OAuthUsersSchema = new Schema({  
  22.   email: { type: String, unique: true, required: true },  
  23.   hashed_password: { type: String, required: true },  
  24.   password_reset_token: { type: String, unique: true },  
  25.   reset_token_expires: Date,  
  26.   firstname: String,  
  27.   lastname: String  
  28. }); 

通過運行代碼中的seed.js,我們創建了一個user.

  1. var app = require('./app');  
  2. var models = require('./models');  
  3.  
  4. models.User.create({  
  5.   email: 'alex@example.com',  
  6.   hashed_password: '$2a$10$aZB36UooZpL.fAgbQVN/j.pfZVVvkHxEnj7vfkVSqwBOBZbB/IAAK' 
  7. }, function() {  
  8.   models.OAuthClientsModel.create({  
  9.     clientId: 'papers3',  
  10.     clientSecret: '123',  
  11.     redirectUri: '/oauth/redirect' 
  12.   }, function() {  
  13.     process.exit();  
  14.   });  
  15. }); 

這樣我們就可以開始體驗這個Node.JS的OAuth2服務器了。先讓Mongo運行起來,負責后臺數據庫, 比如"mongod -dbpath ./", 之后運行"npm start".

  1. oliverluan@localhost:~/Documents/EvWork/node_oauth2_example/oauth2-example$ npm start  
  2.  
  3. > oauth2-experiment@0.0.1 start /Users/oliverluan/Documents/EvWork/node_oauth2_example/oauth2-example  
  4. > ./node_modules/.bin/nodemon server.js  
  5.  
  6. 14 Apr 07:02:43 - [nodemon] v1.0.17  
  7. 14 Apr 07:02:43 - [nodemon] to restart at any time, enter `rs`  
  8. 14 Apr 07:02:43 - [nodemon] watching: *.*  
  9. 14 Apr 07:02:43 - [nodemon] starting `node server.js`  
  10. connect.multipart() will be removed in connect 3.0  
  11. visit https://github.com/senchalabs/connect/wiki/Connect-3.0 for alternatives  
  12. connect.limit() will be removed in connect 3.0  
  13. Express server listening on port: 3000  
  14. POST /oauth/token 200 102ms - 175b  
  15. GET /secret 200 2ms - 11b 

模擬一個Oauth2的access token請求,運行這份文件(node getToken.js)

  1. var request = require('request');  
  2.  
  3. //client_id  
  4. var t_client_id = 'papers3';  
  5. //client_secret  
  6. var t_client_secret = '123';  
  7. //clientCredentials  以client_id:client_secret形式組合并轉換成Base64-encoded  
  8. var clientCredentials = (t_client_id + ':'+t_client_secret).toString('base64');  
  9. //用戶名  
  10. var t_username = 'alex@example.com';  
  11. //密碼  
  12. var t_password = 'test';  
  13.  
  14. console.log(clientCredentials);  
  15.  
  16. //發送Post請求獲取Token  
  17. request.post({    
  18.   url: 'http://' + clientCredentials + '@localhost:3000/oauth/token',  
  19.   form: {  
  20.     grant_type: 'password',  
  21.     username: t_username,  
  22.     password: t_password,  
  23.     client_id: t_client_id,  
  24.     client_secret: t_client_secret  
  25.   },  
  26. }, function(err, res, body) {  
  27.   console.log(body);  
  28.   //獲得Token  
  29.   var accessToken = JSON.parse(body).access_token;  
  30.  
  31.   request.get({  
  32.     url: 'http://localhost:3000/secret',  
  33.     headers: { Authorization: 'Bearer ' + accessToken }  
  34.   }, function(err, res, body) {  
  35.     console.log(body);  
  36.    });  
  37. });  

成功獲得access token.

  1. oliverluan@localhost:~/Documents/EvWork/node_oauth2_example/oauth2-example$ node getToken.js  
  2. papers3:123  
  3. {  
  4.   "token_type""bearer",  
  5.   "access_token""620bb362f32857d5174802e06065305874953597",  
  6.   "expires_in": 3600,  
  7.   "refresh_token""569be5f4cc1ea943021b3676eaa2a51825c2c257" 
  8. }  
  9. Secret area 

原文鏈接:http://blog.csdn.net/u011581005/article/details/23650917

責任編輯:林師授 來源: neokidd的博客
相關推薦

2020-10-12 08:06:28

HTTP 服務器證書

2019-02-15 10:49:37

Node.jsweb服務器

2021-11-15 13:58:00

服務器配置授權

2021-08-29 23:33:44

OAuth2服務器Keycloak

2020-03-17 13:24:04

微服務架構數據

2013-05-02 14:13:44

Android開發OAuth2服務認證

2022-02-15 07:35:12

服務器KeycloakOAuth2

2011-07-26 11:07:08

JavaScript

2011-06-17 10:29:04

Nodejavascript

2022-06-05 13:52:32

Node.jsDNS 的原理DNS 服務器

2021-09-02 10:49:25

Node.jsPHP服務器開發

2011-09-08 10:21:50

Node.js

2022-05-13 15:15:18

服務器OAuth2控制臺

2021-02-04 09:18:20

服務器認證自定義

2020-10-29 16:00:03

Node.jsweb前端

2011-10-19 14:38:46

Node.js

2025-04-29 09:07:21

2013-11-01 09:34:56

Node.js技術

2015-03-10 10:59:18

Node.js開發指南基礎介紹

2022-08-28 16:30:34

Node.jsDocker指令
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩精品一区二区三区中文在线 | 91精品国产乱码久久久 | 亚洲精品v日韩精品 | 国产高清在线观看 | 亚洲国产精品一区二区第一页 | 国产精品久久久久久久久动漫 | 91一区二区 | 精品国产乱码久久久久久蜜臀 | 午夜无码国产理论在线 | 欧美一区二区三区在线看 | 午夜视频在线免费观看 | 欧美一区二区三区在线 | 伊人网在线综合 | av不卡一区 | 国产精久久久久久 | 欧美视频三级 | 99精品久久99久久久久 | 亚洲视频欧美视频 | 日韩在线视频免费观看 | 欧美激情国产日韩精品一区18 | 一区二区三区在线 | 天天色av | 欧美一区二区三区的 | 久久久久久久久淑女av国产精品 | 国产免费色| 亚洲精品中文在线观看 | 黄色a三级 | 成人精品国产 | 在线只有精品 | 国产香蕉视频 | 精品国产乱码久久久久久88av | 亚洲免费视频一区 | 亚洲欧美中文日韩在线v日本 | 超碰一区二区 | 免费黄色片在线观看 | 亚洲人成人一区二区在线观看 | 亚洲日韩中文字幕 | 亚洲女人天堂网 | 99国产精品久久久久老师 | 国产精品一区二区电影 | 欧美在线不卡 |