通过nodejs服务器实现一整套oauth2的基本框架
源码: http://download.csdn.net/download/panshang1994/10165821
依赖包
npm install oauth2-server@2.4.1
oauth2 结构
| ├──oauth2 // 主目录
| ├──controller // 控制器
| ├──model // 数据库模型
| ├──scripts // 添加脚本
| ├──middleware // 用于routes的中间件
| ├──model // 用于oauth2的模型
oauth2 嵌入
中间件验证
router.all('/openapi', oauthMiddleware.oauthDoor, fooCtrl.Foo)
获取 access_token
router.all('/oauth/access_token', oauthMiddleware.getAccessToken)
一.【模式1】 AppId、AppSecret (Client模式)
1.[导入Client]
方式1 使用脚本导入
node ./backend/oauth2/scripts/importnew
可以配置 AppId、AppSecret, 然后运行脚本完成导入新的第三方App
方式2 通过Api接口新增
api 接口: ‘/oauth/client/add’
请求方式1
body: {
clientId: String
}
将保存client名称为指定名称,方便第三方应用记忆
请求方式2
body: {}
将自动生成 sha1 哈希
2.申请access_token
申请接口: /oauth/access_token
参数表:
const reqExample = {
method: 'POST',
Headers: {
'Content-Type': "application/x-www-form-urlencoded"
},
body: {
grant_type: 'client_credentials',
client_id: 'shinepans', // importnew scripts example
client_secret: '123' // simple password in test in importnew scripts
}
}
请求成功后,服务器将返回:
return example = {
"token_type": "bearer",
"access_token": "e5cde9fbeef278b3eebcf55b3ac125589958446a",
"expires_in": 3600,
"refresh_token": "c47147ab573e478ed69318690cdd64da04a40790"
}
3.通过得到的access_token访问api
请求接口实例:
‘/openapi/subjects’
请求参数:
const reqExample = {
Headers: {
"Authorization": "Bearer ad77e2040461b23ad2624e9e31076fb92f39ad39"
}
}
返回结果示例:
return example = {
"err": 0,
"data": []
}
关于认证模式
当前使用Clinet认证方式,oauth2支持4中认证模式,当前已实现,模拟微信的oauth2,即通过code获取access_token以及第三方登录,已有方案,如需开发,可给我留言,我们一起讨论。
关于代码
代码是从实际项目中剥离出来,如果需要嵌入或运行,请仔细审阅代码,需要的改动非常小,甚至不需要改动,欢迎使用oauth2参考代码。
关于测试
当前剥离项目暂没有写任何测试,您可以先通过 postman等工具进行测试,或通过写脚本提交http请求来测试。