- 1. 前言
- 2. Öffnen.https
- 3. Herausgeber器与Admin API的鉴权
- 4. 设置默认用户
- 5. Custom definiert用户鉴权
- 6. 结语
前言
默认地,node-redHerausgeber器可以被任何访问的用户Operationen,包括修改节点,流Daten,重新部署流。
这种默认的部署方式只适用于Betrieb在可靠的网络中。下面我就给大家介绍一下,在公网上部署node-red后,如何对其进行安全加固和权限验证。
主要Unterteilung为三部Unterteilung
- Öffnen.https权限
- 保护Herausgeber器和admin api
- 保护http节点和node-red的仪表盘
Öffnen.https
node-red默认是使用http来进行访问,如果要配置https访问,你需要在node-red的配置文件setting文件中配置一下https部Unterteilung的内容
在配置文件中 https配置项可以是一个json静态Daten,也可以是一个函数。vollständig的配置Parameter事nodejs中http模块的配置 Klicken链接可以Überprüfenzuvollständig的配置
在该配置项中,至少要有二项需要返回或配置。
- key PEMDas Format化后的密钥,Typus可以是String 或Buffer
- cert PEMDas Format化后的 Cert chain,Typus可以是String 或Buffer
配置的例子
https: {
key: require("fs").readFileSync('privkey.pem'),
cert: require("fs").readFileSync('cert.pem')
},
如果你要配置成一个function的话,请记得将key与cert放zupromise中,如下
https: function() {
return new Promise((resolve, reject) => {
var key, cert;
// Do some work to obtain valid certificates
// ...
resolve({
key: key
cert: cert
})
});
}
如果你要在配置https后,自动Erfrischen证书,并且不用重启node-red,node-red也是能做zu的,需要nodejs在11之上,并且https必须配置成function,接着设置 httpsRefreshInterval,Typus为一个数字,表示几小时内循环自动Erfrischen。
Herausgeber器与Admin API的鉴权
node-red的Herausgeber器与Admin api支持两种Typus的鉴权
- 使用用户名 密码证书来进行鉴权
- 使用任何OAuth/OpenID提供商来进行鉴权,如Twitter活GitHub。
基于用户名和密码的鉴权只需要在setting配置文件中配置即可
如下是一个配置Beispiel
adminAuth: {
type: "credentials",
users: [
{
username: "admin",
password: "$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN.",
permissions: "*"
},
{
username: "george",
password: "$2b$08$wuAqPiKJlVN27eF5qJp.RuQYuy6ZYONW7a/UWYxDTtwKFCdB8F19y",
permissions: "read"
}
]
}
管理员可以配置多个用户。这些用户的Registrierung及权限Daten都是写死的。包括Registrierung的账Nr.,密码,和权限。Von denen密码是使用bcrypt 算法Werkzeuge进行hash加密。
生成hash密码可以使用 node-red admin hash-pw(在node-red 1.1.0 之后)
使用OAuth/OpenID来进行授权
dminAuth: {
type:"strategy",
strategy: {
name: "twitter",
label: 'Sign in with Twitter',
icon:"fa-twitter",
strategy: require("passport-twitter").Strategy,
options: {
consumerKey: TWITTER_APP_CONSUMER_KEY,
consumerSecret: TWITTER_APP_CONSUMER_SECRET,
callbackURL: "http://example.com/auth/strategy/callback",
verify: function(token, tokenSecret, profile, done) {
done(null, profile);
}
},
},
users: [
{ username: "knolleary",permissions: ["*"]}
]
}
配置项详解:
name: 策略Name
lable/icon:在Registrierung页显示的信息
strategy:需要使用zu的库
options:根据strategy来进行配置,需要使用的Parameter
verify:验证函数,最后使用done函数将用户Informationen向下传递
设置默认用户
如果你想要限定没有Registrierung时,node-red的一些权限,可以使用设置默认用户的方式来实现
配置一个默认用户,并配置其对于的权限。权限可以是Alles,也可以是只读。
如下是一个例子
adminAuth: {
type: "credentials",
users: [ /* list of users */ ],
default: {
permissions: "read"
}
}
除来 * 和 read 两种大模块的权限限定外,管理员还可以配置Admin API
例如为了获取gegenwärtig流的信息,用户将会要求 flow.read权限。如果要更新流信息,他们需要使用flows.write权限。
Custom definiert用户鉴权
目前介绍的用户鉴权都是硬Codierung的鉴权,写死用户Daten及对于的权限。这种方式不方便扩展,所以node-red又提供了另一种方式,Custom definiert用户鉴权。以下是实现步骤
创建 <node-red>/user-authentication.js 按照以下模版编写授权代码
module.exports = {
type: "credentials",
users: function(username) {
return new Promise(function(resolve) {
// Do whatever work is needed to check username is a valid
// user.
if (valid) {
// Resolve with the user object. It must contain
// properties 'username' and 'permissions'
var user = { username: "admin", permissions: "*" };
resolve(user);
} else {
// Resolve with null to indicate this user does not exist
resolve(null);
}
});
},
authenticate: function(username,password) {
return new Promise(function(resolve) {
// Do whatever work is needed to validate the username/password
// combination.
if (valid) {
// Resolve with the user object. Equivalent to having
// called users(username);
var user = { username: "admin", permissions: "*" };
resolve(user);
} else {
// Resolve with null to indicate the username/password pair
// were not valid.
resolve(null);
}
});
},
default: function() {
return new Promise(function(resolve) {
// Resolve with the user object for the default user.
// If no default user exists, resolve with null.
resolve({anonymous: true, permissions:"read"});
});
}
}
最后在setting文件的adminAuth中配置adminAuth: require("./user-authentication")
结语
以上就是本篇的Alles内容,这些内容对于想要精细化控制node-red的权限尤为重要,特别是要将其改造为一个多租户Das System时。 谢谢观看。
Antwort veröffentlichen