arangodb 验证_users 密码
arangodb verify _users password
如何验证给定密码是否与 arangoDB 中集合 _users
中的密码匹配?
我知道可以使用 Foxx 应用程序和 arangosh 来完成,但我没有使用它们,因为我在 python 中使用我自己的 API。所以我不知道如何在不使用 Foxx 或 arangosh 的情况下访问密码并检查是否与给定的密码匹配。
最简单的方法是简单地尝试一个普通的 http 请求,并检查其结果。最简单的调用是_api/version
;我们给数据库加上前缀,以确定用户是否被允许访问特定的数据库。对于这个例子,我们使用 _system
;您需要将其替换为您要测试身份验证的数据库。
curl --dump - http://Joe:passvoid@localhost:8529/_db/_system/_api/version
GET /_db/_system/_api/version HTTP/1.1
Authorization: Basic Sm9lOnBhc3N2b2lk
User-Agent: curl/7.38.0
Host: localhost:8529
Accept: */*
HTTP/1.1 200 OK
Server: ArangoDB
Connection: Keep-Alive
Content-Type: application/json; charset=utf-8
Content-Length: 37
{"server":"arango","version":"2.8.8"}
curl --dump - http://Joe:WRONGpassvoid@localhost:8529/_db/_system/_api/version
GET /_db/_system/_api/version HTTP/1.1
Authorization: Basic Sm9lOldST05HcGFzc3ZvaWQ=
User-Agent: curl/7.38.0
Host: localhost:8529
Accept: */*
HTTP/1.1 401 Unauthorized
Server: ArangoDB
Content-Type: text/plain; charset=utf-8
Www-Authenticate: basic realm="arangodb/_system"
Connection: Keep-Alive
Content-Length: 0
因此您需要检查 HTTP 状态代码:200
-> 成功; 401
-> 失败。有关 python 特定 http 处理的详细信息,请参阅 howto create authentication headers with python。
您不应该依赖系统 _users
集合来实现您自己的用户逻辑。该集合严格用于ArangoDB自己的用户对象,不用于应用程序级用户管理。
如果你真的想使用 ArangoDB 自己的用户管理,最好的方法是在禁用身份验证时使用 ArangoDB 中的 org/arangodb/users
模块(例如使用 Foxx)。该模块提供了一个 isValid
方法,该方法接受用户名和密码以及 returns 一个指示组合是否有效的布尔值:
var users = require('org/arangodb/users');
controller.post('/checkpw', function (req, res) {
var credentials = req.params('credentials');
res.json({
valid: users.isValid(
credentials.username,
credentials.password
)
});
})
.bodyParam('credentials', joi.object({
username: joi.string().required(),
password: joi.string().required()
}).required());
用户 HTTP API 目前没有公开这个方法,所以这是唯一不依赖极不稳定的实现细节的方法(_users
集合的格式已经改变整个 2.x 并且该系列将来可能会再次更改)。
编辑:当提供有效的用户名和密码时,ArangoDB 3.0 可能会添加一个 API 路由,该路由 returns 一个令牌(而不是用会话对象使数据库混乱)。这应该更容易与内置用户管理集成,但注意事项保持不变:ArangoDB 用户主要用于 API 级授权,而不是应用程序逻辑。
如何验证给定密码是否与 arangoDB 中集合 _users
中的密码匹配?
我知道可以使用 Foxx 应用程序和 arangosh 来完成,但我没有使用它们,因为我在 python 中使用我自己的 API。所以我不知道如何在不使用 Foxx 或 arangosh 的情况下访问密码并检查是否与给定的密码匹配。
最简单的方法是简单地尝试一个普通的 http 请求,并检查其结果。最简单的调用是_api/version
;我们给数据库加上前缀,以确定用户是否被允许访问特定的数据库。对于这个例子,我们使用 _system
;您需要将其替换为您要测试身份验证的数据库。
curl --dump - http://Joe:passvoid@localhost:8529/_db/_system/_api/version
GET /_db/_system/_api/version HTTP/1.1
Authorization: Basic Sm9lOnBhc3N2b2lk
User-Agent: curl/7.38.0
Host: localhost:8529
Accept: */*
HTTP/1.1 200 OK
Server: ArangoDB
Connection: Keep-Alive
Content-Type: application/json; charset=utf-8
Content-Length: 37
{"server":"arango","version":"2.8.8"}
curl --dump - http://Joe:WRONGpassvoid@localhost:8529/_db/_system/_api/version
GET /_db/_system/_api/version HTTP/1.1
Authorization: Basic Sm9lOldST05HcGFzc3ZvaWQ=
User-Agent: curl/7.38.0
Host: localhost:8529
Accept: */*
HTTP/1.1 401 Unauthorized
Server: ArangoDB
Content-Type: text/plain; charset=utf-8
Www-Authenticate: basic realm="arangodb/_system"
Connection: Keep-Alive
Content-Length: 0
因此您需要检查 HTTP 状态代码:200
-> 成功; 401
-> 失败。有关 python 特定 http 处理的详细信息,请参阅 howto create authentication headers with python。
您不应该依赖系统 _users
集合来实现您自己的用户逻辑。该集合严格用于ArangoDB自己的用户对象,不用于应用程序级用户管理。
如果你真的想使用 ArangoDB 自己的用户管理,最好的方法是在禁用身份验证时使用 ArangoDB 中的 org/arangodb/users
模块(例如使用 Foxx)。该模块提供了一个 isValid
方法,该方法接受用户名和密码以及 returns 一个指示组合是否有效的布尔值:
var users = require('org/arangodb/users');
controller.post('/checkpw', function (req, res) {
var credentials = req.params('credentials');
res.json({
valid: users.isValid(
credentials.username,
credentials.password
)
});
})
.bodyParam('credentials', joi.object({
username: joi.string().required(),
password: joi.string().required()
}).required());
用户 HTTP API 目前没有公开这个方法,所以这是唯一不依赖极不稳定的实现细节的方法(_users
集合的格式已经改变整个 2.x 并且该系列将来可能会再次更改)。
编辑:当提供有效的用户名和密码时,ArangoDB 3.0 可能会添加一个 API 路由,该路由 returns 一个令牌(而不是用会话对象使数据库混乱)。这应该更容易与内置用户管理集成,但注意事项保持不变:ArangoDB 用户主要用于 API 级授权,而不是应用程序逻辑。