查询用户 API

编辑

分页方式,使用 查询 DSL检索原生用户

获取用户 API不同,结果中会排除内置用户。 此 API 仅适用于原生用户

请求

编辑

GET /_security/_query/user

POST /_security/_query/user

先决条件

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

描述

编辑

使用此 API 以分页方式检索由原生领域管理的用户。 您可以选择使用查询来过滤结果。

请求体

编辑

您可以在请求体中指定以下参数

query

(可选,字符串)用于过滤要返回的用户的查询。 该查询支持查询类型的子集,包括 match_allbooltermtermsmatchidsprefixwildcardexistsrangesimple query string

您可以查询与用户关联的以下公共值。

query 的有效值
username
用户的标识符。
roles
分配给用户的角色的角色名称数组。
full_name
用户的全名。
email
用户的电子邮件。
enabled
指定是否启用用户。
from

(可选,整数)起始文档偏移量。 需要是非负数,默认为 0

默认情况下,您不能使用 fromsize 参数浏览超过 10,000 个匹配项。 要浏览更多匹配项,请使用 search_after 参数。

size

(可选,整数)要返回的匹配项数。 不能为负数,默认为 10

默认情况下,您不能使用 fromsize 参数浏览超过 10,000 个匹配项。 要浏览更多匹配项,请使用 search_after 参数。

sort
(可选,对象)排序定义。 您可以对 usernamerolesenabled 进行排序。此外,排序还可以应用于 _doc 字段,以按索引顺序排序。
search_after
(可选,数组)搜索后定义。

查询参数

编辑
with_profile_uid
(可选,布尔值)确定是否检索用户的用户配置文件 uid(如果存在)。默认为 false

响应体

编辑

此 API 返回以下顶级字段

total
找到的用户总数。
count
响应中返回的用户数。
users
与查询匹配的用户列表。

示例

编辑

以下请求列出所有用户,假设您具有 read_security 权限

resp = client.perform_request(
    "GET",
    "/_security/_query/user",
)
print(resp)
const response = await client.security.queryUser();
console.log(response);
GET /_security/_query/user

成功调用会返回一个 JSON 结构,其中包含从一个或多个用户检索的信息

{
    "total": 2,
    "count": 2,
    "users": [ 
        {
            "username": "jacknich",
            "roles": [
                "admin",
                "other_role1"
            ],
            "full_name": "Jack Nicholson",
            "email": "[email protected]",
            "metadata": {
                "intelligence": 7
            },
            "enabled": true
        },
        {
            "username": "sandrakn",
            "roles": [
                "admin",
                "other_role1"
            ],
            "full_name": "Sandra Knight",
            "email": "[email protected]",
            "metadata": {
                "intelligence": 7
            },
            "enabled": true
        }
    ]
}

为该请求检索的用户列表

如果使用以下详细信息创建用户

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
}

使用用户信息,通过查询检索用户

resp = client.perform_request(
    "POST",
    "/_security/_query/user",
    headers={"Content-Type": "application/json"},
    body={
        "query": {
            "prefix": {
                "roles": "other"
            }
        }
    },
)
print(resp)
const response = await client.security.queryUser({
  query: {
    prefix: {
      roles: "other",
    },
  },
});
console.log(response);
POST /_security/_query/user
{
    "query": {
        "prefix": {
            "roles": "other"
        }
    }
}

成功调用会返回用户的 JSON 结构

{
    "total": 1,
    "count": 1,
    "users": [
        {
            "username": "jacknich",
            "roles": [
                "admin",
                "other_role1"
            ],
            "full_name": "Jack Nicholson",
            "email": "[email protected]",
            "metadata": {
                "intelligence": 7
            },
            "enabled": true
        }
    ]
}

要检索作为响应一部分的用户的 profile_uid

resp = client.perform_request(
    "POST",
    "/_security/_query/user",
    params={
        "with_profile_uid": "true"
    },
    headers={"Content-Type": "application/json"},
    body={
        "query": {
            "prefix": {
                "roles": "other"
            }
        }
    },
)
print(resp)
const response = await client.security.queryUser({
  with_profile_uid: "true",
  query: {
    prefix: {
      roles: "other",
    },
  },
});
console.log(response);
POST /_security/_query/user?with_profile_uid=true
{
    "query": {
        "prefix": {
            "roles": "other"
        }
    }
}
{
    "total": 1,
    "count": 1,
    "users": [
        {
            "username": "jacknich",
            "roles": [
                "admin",
                "other_role1"
            ],
            "full_name": "Jack Nicholson",
            "email": "[email protected]",
            "metadata": {
                "intelligence": 7
            },
            "enabled": true,
            "profile_uid": "u_79HkWkwmnBH5gqFKwoxggWPjEBOur1zLPXQPEl1VBW0_0"
        }
    ]
}

使用 bool 查询来发出复杂的逻辑条件,并使用 fromsizesort 来帮助分页结果

POST /_security/_query/user
{
  "query": {
    "bool": {
      "must": [
        {
          "wildcard": {
            "email": "*example.com" 
          }
        },
        {
          "term": {
            "enabled": true 
          }
        }
      ],
      "filter": [
        {
          "wildcard": {
            "roles": "*other*" 
          }
        }
      ]
    }
  },
  "from": 1, 
  "size": 2, 
  "sort": [
    { "username": { "order": "desc"} } 
  ]
}

电子邮件必须以 example.com 结尾

必须启用用户

结果将被过滤,仅包含至少包含子字符串 other 的一个角色的用户

开始搜索结果的偏移量是第二个(基于零的索引)用户

响应的页面大小为 2 个用户

结果按 username 降序排序

响应包含匹配用户及其排序值的列表

{
    "total": 5,
    "count": 2,
    "users": [
        {
            "username": "ray",
            "roles": [
                "other_role3"
            ],
            "full_name": "Ray Nicholson",
            "email": "[email protected]",
            "metadata": {
                "intelligence": 7
            },
            "enabled": true,
            "_sort": [
                "ray" 
            ]
        },
        {
            "username": "lorraine",
            "roles": [
                "other_role3"
            ],
            "full_name": "Lorraine Nicholson",
            "email": "[email protected]",
            "metadata": {
                "intelligence": 7
            },
            "enabled": true,
            "_sort": [
                "lorraine"
            ]
        }
    ]
}

排序值为 username