基于nodejs的oauth2实现以及源码参考

时间:2022-12-19 21:01:11

通过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请求来测试。

关于代码源参考库