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

来源:互联网 发布:vscode移除文件夹 编辑:程序博客网 时间:2024/06/05 06:42

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

关于代码源参考库

  • oauth2-server github仓库
  • node-oauth2-server-example github仓库
阅读全文
0 0
原创粉丝点击