创建或更新用户 API

编辑

在本地 realm 中添加和更新用户。这些用户通常被称为本地用户

请求

编辑

POST /_security/user/<用户名>

PUT /_security/user/<用户名>

先决条件

编辑
  • 要使用此 API,您必须至少拥有 manage_security 集群权限。

描述

编辑

添加新用户时需要 password,但更新现有用户时是可选的。要在不更新任何其他字段的情况下更改用户密码,请使用 更改密码 API

有关本地 realm 的更多信息,请参阅 Realm本地用户身份验证

路径参数

编辑
username

(必需,字符串)用户的标识符。

用户名必须至少 1 个字符,不超过 507 个字符。它们可以包含字母数字字符(a-zA-Z0-9)、空格、标点符号和 基本拉丁 (ASCII) 块中的可打印符号。不允许前导或尾随空格。

查询参数

编辑
refresh
(字符串)truefalsewait_for 之一。这些值的含义与 索引 API 中的含义相同,但此 API(Put User)的默认值为 true

请求体

编辑

以下参数可以在 POST 或 PUT 请求的主体中指定

enabled
(布尔值)指定是否启用用户。默认值为 true
email
(字符串)用户的电子邮件。
full_name
(字符串)用户的全名。
metadata
(对象)您想要与用户关联的任意元数据。
password

(必需*,字符串)用户的密码。密码必须至少 6 个字符长。

添加用户时,passwordpassword_hash 之一是必需的。更新现有用户时,密码是可选的,因此可以在不修改用户密码的情况下更新用户的其他字段(例如他们的角色)。

password_hash

(字符串)用户密码的哈希值。这必须使用与配置用于密码存储的相同哈希算法生成。有关更多详细信息,请参阅 用户缓存和密码哈希算法xpack.security.authc.password_hashing.algorithm 设置的说明。

使用此参数允许客户端出于性能和/或机密性原因预先哈希密码。

password 参数和 password_hash 参数不能在同一请求中使用。

roles
(必需,列表)用户拥有的一组角色。角色决定用户的访问权限。要创建一个没有任何角色的用户,请指定一个空列表:[]

*表示该设置在某些情况下是必需的,但在并非所有情况下都是必需的。

示例

编辑

以下示例创建用户 jacknich

resp = client.security.put_user(
    username="jacknich",
    password="l0ng-r4nd0m-p@ssw0rd",
    roles=[
        "admin",
        "other_role1"
    ],
    full_name="Jack Nicholson",
    email="[email protected]",
    metadata={
        "intelligence": 7
    },
)
print(resp)
const response = await client.security.putUser({
  username: "jacknich",
  password: "l0ng-r4nd0m-p@ssw0rd",
  roles: ["admin", "other_role1"],
  full_name: "Jack Nicholson",
  email: "[email protected]",
  metadata: {
    intelligence: 7,
  },
});
console.log(response);
POST /_security/user/jacknich
{
  "password" : "l0ng-r4nd0m-p@ssw0rd",
  "roles" : [ "admin", "other_role1" ],
  "full_name" : "Jack Nicholson",
  "email" : "[email protected]",
  "metadata" : {
    "intelligence" : 7
  }
}

成功的调用会返回一个 JSON 结构,该结构显示用户是否已被创建或更新。

{
  "created": true 
}

更新现有用户时,created 设置为 false。

添加用户后,可以对该用户的请求进行身份验证。例如

curl -u jacknich:l0ng-r4nd0m-p@ssw0rd https://127.0.0.1:9200/_cluster/health