2021-07-12-带着问题看源码2-NodeRed的用户认证机制是怎样的

1. 几种常用的认证机制#

1.1. HTTP Basic Auth#

Basic Auth是开放平台的两种认证方式,简单点说明就是每次请求API时都提供用户的username和password。

  • 优点:
    • 使用非常简单,
    • 开发和调试工作简单,
    • 没有复杂的页面跳转逻辑和交互过程;
    • 更利于发起方控制;
  • 缺点:
    • 安全性低,每次都需要传递用户名和密码,用户名和密码很大程度上存在被监听盗取的可能;一次密码盗用,会导致所有使用此密码的全部应用处于风险之中
    • 同时应用本地还需要保存用户名和密码,在应用本身的安全性来说,也存在很大问题;
    • 开放平台服务商出于自身安全性的考虑(第三方可以得到该服务商用户的账号密码,对于服务商来说是一种安全隐患),未来也会限制此认证方式(Twitter就计划在6月份停止Basic Auth的支持)
    • 用户如果更改了用户名和密码,还需要重新进行密码校验的过程。

      1.2. OAuth#

      OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版。
      OAuth在”客户端”与”服务提供商”之间,设置了一个授权层(authorization layer)。”客户端”不能直接登录”服务提供商”,只能登录授权层,以此将用户与客户端区分开来。”客户端”登录授权层所用的token(token),与用户的密码不同。用户可以在登录的时候,指定授权层token的权限范围和有效期。
      “客户端”登录授权层以后,”服务提供商”根据token的权限范围和有效期,向”客户端”开放用户储存的资料。
      客户端必须得到用户的授权(authorization grant),才能获得token(access token)。
      主要流程如下:
      主要流程)
阅读更多

2021-07-12-带着问题看源码1-NodeRed如何提供Web服务的

NodeRed结构#

NodeRed既包含后端也包含前端。后端基于Node.js,同时包含 Express 框架。
Express 是一个保持最小规模的灵活的 Node.js Web 应用程序开发框架,为 Web 和移动应用程序提供一组强大的功能。

NodeRed中的Express工作流#

%%配置
%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#FFFFFF'}}}%%
sequenceDiagram
autonumber

%%实现
title: NodeRed中的Express之路由配置
packages\node_modules\nodered\red.js ->> packages\node_modules\nodered\red.js: express() 创建app,为web服务提供入口
packages\node_modules\nodered\red.js ->> packages\node_modules\nodered\red.js: http.createServer,以app为处理函数,express提供路由、中间件处理

packages\node_modules\nodered\red.js ->> packages\node_modules\nodered\red.js:根据httpAdminRoot、httpNodeRoot、httpStatic等变量,做根目录‘/’的路由,将根路径'/'路由到RED.httpAdmin(adminApp)上,将根路径'/'路由到RED.httpNode(runtime.httpNode ==nodeApp)上,配合httpin节点,实现节点内的http服务处理

packages\node_modules\nodered\red.js ->> packages\node_modules\@nodered\runtime\lib\index.js : 配置runtimeb子路由 ( adminApp )

packages\node_modules\nodered\red.js ->> packages\node_modules\@nodered\editorapi\lib\index.js : 配置editorapi路由,创建 nodeApp 、 adminApp 子路由

packages\node_modules\@nodered\editorapi\lib\index.js ->> packages\node_modules\@nodered\editorapi\lib\editor\index.js : 配置editor editor模块路由,创建 editorApp 子路由
packages\node_modules\@nodered\editorapi\lib\index.js ->> packages\node_modules\@nodered\editorapi\lib\admin\index.js : 配置editorapi admin模块路由,创建 adminApp 子路由
%%配置
%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#FFFFFF'}}}%%
sequenceDiagram
autonumber

%%实现
title: NodeRed中的Express之Web服务启动
packages\node_modules\nodered\red.js ->> packages\node_modules\nodered\red.js: 完成初始化后,server.listen 配置参数 settings.uiPort settings.uiHost,启动服务
阅读更多