- Elasticsearch 指南其他版本
- 8.17 中的新功能
- Elasticsearch 基础
- 快速入门
- 设置 Elasticsearch
- 升级 Elasticsearch
- 索引模块
- 映射
- 文本分析
- 索引模板
- 数据流
- 摄取管道
- 别名
- 搜索您的数据
- 重新排名
- 查询 DSL
- 聚合
- 地理空间分析
- 连接器
- EQL
- ES|QL
- SQL
- 脚本
- 数据管理
- 自动缩放
- 监视集群
- 汇总或转换数据
- 设置高可用性集群
- 快照和还原
- 保护 Elastic Stack 的安全
- Watcher
- 命令行工具
- elasticsearch-certgen
- elasticsearch-certutil
- elasticsearch-create-enrollment-token
- elasticsearch-croneval
- elasticsearch-keystore
- elasticsearch-node
- elasticsearch-reconfigure-node
- elasticsearch-reset-password
- elasticsearch-saml-metadata
- elasticsearch-service-tokens
- elasticsearch-setup-passwords
- elasticsearch-shard
- elasticsearch-syskeygen
- elasticsearch-users
- 优化
- 故障排除
- 修复常见的集群问题
- 诊断未分配的分片
- 向系统中添加丢失的层
- 允许 Elasticsearch 在系统中分配数据
- 允许 Elasticsearch 分配索引
- 索引将索引分配过滤器与数据层节点角色混合,以在数据层之间移动
- 没有足够的节点来分配所有分片副本
- 单个节点上索引的分片总数已超过
- 每个节点的分片总数已达到
- 故障排除损坏
- 修复磁盘空间不足的数据节点
- 修复磁盘空间不足的主节点
- 修复磁盘空间不足的其他角色节点
- 启动索引生命周期管理
- 启动快照生命周期管理
- 从快照恢复
- 故障排除损坏的存储库
- 解决重复的快照策略失败问题
- 故障排除不稳定的集群
- 故障排除发现
- 故障排除监控
- 故障排除转换
- 故障排除 Watcher
- 故障排除搜索
- 故障排除分片容量健康问题
- 故障排除不平衡的集群
- 捕获诊断信息
- REST API
- API 约定
- 通用选项
- REST API 兼容性
- 自动缩放 API
- 行为分析 API
- 紧凑和对齐文本 (CAT) API
- 集群 API
- 跨集群复制 API
- 连接器 API
- 数据流 API
- 文档 API
- 丰富 API
- EQL API
- ES|QL API
- 功能 API
- Fleet API
- 图表探索 API
- 索引 API
- 别名是否存在
- 别名
- 分析
- 分析索引磁盘使用量
- 清除缓存
- 克隆索引
- 关闭索引
- 创建索引
- 创建或更新别名
- 创建或更新组件模板
- 创建或更新索引模板
- 创建或更新索引模板(旧版)
- 删除组件模板
- 删除悬挂索引
- 删除别名
- 删除索引
- 删除索引模板
- 删除索引模板(旧版)
- 存在
- 字段使用情况统计信息
- 刷新
- 强制合并
- 获取别名
- 获取组件模板
- 获取字段映射
- 获取索引
- 获取索引设置
- 获取索引模板
- 获取索引模板(旧版)
- 获取映射
- 导入悬挂索引
- 索引恢复
- 索引段
- 索引分片存储
- 索引统计信息
- 索引模板是否存在(旧版)
- 列出悬挂索引
- 打开索引
- 刷新
- 解析索引
- 解析集群
- 翻转
- 收缩索引
- 模拟索引
- 模拟模板
- 拆分索引
- 解冻索引
- 更新索引设置
- 更新映射
- 索引生命周期管理 API
- 推理 API
- 信息 API
- 摄取 API
- 许可 API
- Logstash API
- 机器学习 API
- 机器学习异常检测 API
- 机器学习数据帧分析 API
- 机器学习训练模型 API
- 迁移 API
- 节点生命周期 API
- 查询规则 API
- 重新加载搜索分析器 API
- 存储库计量 API
- 汇总 API
- 根 API
- 脚本 API
- 搜索 API
- 搜索应用程序 API
- 可搜索快照 API
- 安全 API
- 身份验证
- 更改密码
- 清除缓存
- 清除角色缓存
- 清除权限缓存
- 清除 API 密钥缓存
- 清除服务帐户令牌缓存
- 创建 API 密钥
- 创建或更新应用程序权限
- 创建或更新角色映射
- 创建或更新角色
- 批量创建或更新角色 API
- 批量删除角色 API
- 创建或更新用户
- 创建服务帐户令牌
- 委托 PKI 身份验证
- 删除应用程序权限
- 删除角色映射
- 删除角色
- 删除服务帐户令牌
- 删除用户
- 禁用用户
- 启用用户
- 注册 Kibana
- 注册节点
- 获取 API 密钥信息
- 获取应用程序权限
- 获取内置权限
- 获取角色映射
- 获取角色
- 查询角色
- 获取服务帐户
- 获取服务帐户凭据
- 获取安全设置
- 获取令牌
- 获取用户权限
- 获取用户
- 授予 API 密钥
- 具有权限
- 使 API 密钥失效
- 使令牌失效
- OpenID Connect 准备身份验证
- OpenID Connect 身份验证
- OpenID Connect 注销
- 查询 API 密钥信息
- 查询用户
- 更新 API 密钥
- 更新安全设置
- 批量更新 API 密钥
- SAML 准备身份验证
- SAML 身份验证
- SAML 注销
- SAML 失效
- SAML 完成注销
- SAML 服务提供商元数据
- SSL 证书
- 激活用户配置文件
- 禁用用户配置文件
- 启用用户配置文件
- 获取用户配置文件
- 建议用户配置文件
- 更新用户配置文件数据
- 具有用户配置文件权限
- 创建跨集群 API 密钥
- 更新跨集群 API 密钥
- 快照和还原 API
- 快照生命周期管理 API
- SQL API
- 同义词 API
- 文本结构 API
- 转换 API
- 使用情况 API
- Watcher API
- 定义
- 迁移指南
- 发行说明
- Elasticsearch 版本 8.17.0
- Elasticsearch 版本 8.16.1
- Elasticsearch 版本 8.16.0
- Elasticsearch 版本 8.15.5
- Elasticsearch 版本 8.15.4
- Elasticsearch 版本 8.15.3
- Elasticsearch 版本 8.15.2
- Elasticsearch 版本 8.15.1
- Elasticsearch 版本 8.15.0
- Elasticsearch 版本 8.14.3
- Elasticsearch 版本 8.14.2
- Elasticsearch 版本 8.14.1
- Elasticsearch 版本 8.14.0
- Elasticsearch 版本 8.13.4
- Elasticsearch 版本 8.13.3
- Elasticsearch 版本 8.13.2
- Elasticsearch 版本 8.13.1
- Elasticsearch 版本 8.13.0
- Elasticsearch 版本 8.12.2
- Elasticsearch 版本 8.12.1
- Elasticsearch 版本 8.12.0
- Elasticsearch 版本 8.11.4
- Elasticsearch 版本 8.11.3
- Elasticsearch 版本 8.11.2
- Elasticsearch 版本 8.11.1
- Elasticsearch 版本 8.11.0
- Elasticsearch 版本 8.10.4
- Elasticsearch 版本 8.10.3
- Elasticsearch 版本 8.10.2
- Elasticsearch 版本 8.10.1
- Elasticsearch 版本 8.10.0
- Elasticsearch 版本 8.9.2
- Elasticsearch 版本 8.9.1
- Elasticsearch 版本 8.9.0
- Elasticsearch 版本 8.8.2
- Elasticsearch 版本 8.8.1
- Elasticsearch 版本 8.8.0
- Elasticsearch 版本 8.7.1
- Elasticsearch 版本 8.7.0
- Elasticsearch 版本 8.6.2
- Elasticsearch 版本 8.6.1
- Elasticsearch 版本 8.6.0
- Elasticsearch 版本 8.5.3
- Elasticsearch 版本 8.5.2
- Elasticsearch 版本 8.5.1
- Elasticsearch 版本 8.5.0
- Elasticsearch 版本 8.4.3
- Elasticsearch 版本 8.4.2
- Elasticsearch 版本 8.4.1
- Elasticsearch 版本 8.4.0
- Elasticsearch 版本 8.3.3
- Elasticsearch 版本 8.3.2
- Elasticsearch 版本 8.3.1
- Elasticsearch 版本 8.3.0
- Elasticsearch 版本 8.2.3
- Elasticsearch 版本 8.2.2
- Elasticsearch 版本 8.2.1
- Elasticsearch 版本 8.2.0
- Elasticsearch 版本 8.1.3
- Elasticsearch 版本 8.1.2
- Elasticsearch 版本 8.1.1
- Elasticsearch 版本 8.1.0
- Elasticsearch 版本 8.0.1
- Elasticsearch 版本 8.0.0
- Elasticsearch 版本 8.0.0-rc2
- Elasticsearch 版本 8.0.0-rc1
- Elasticsearch 版本 8.0.0-beta1
- Elasticsearch 版本 8.0.0-alpha2
- Elasticsearch 版本 8.0.0-alpha1
- 依赖项和版本
获取令牌 API
编辑获取令牌 API
编辑创建无需基本身份验证即可访问的持有者令牌。
请求
编辑POST /_security/oauth2/token
先决条件
编辑- 要使用此 API,您必须具有
manage_token
集群权限。
描述
编辑令牌由 Elasticsearch 令牌服务创建,当您在 HTTP 接口上配置 TLS 时,该服务会自动启用。请参阅 为 Elasticsearch 加密 HTTP 客户端通信。或者,您可以显式启用 xpack.security.authc.token.enabled
设置。当您在生产模式下运行时,引导检查会阻止您启用令牌服务,除非您还在 HTTP 接口上启用了 TLS。
获取令牌 API 采用与典型 OAuth 2.0 令牌 API 相同的参数,但使用 JSON 请求正文除外。
成功的获取令牌 API 调用会返回一个 JSON 结构,其中包含访问令牌、令牌过期的时长(秒)、类型以及(如果可用)范围。
获取令牌 API 返回的令牌在有限的时间段内有效,超过该时间段后,它们将无法再使用。该时间段由 xpack.security.authc.token.timeout
设置定义。有关更多信息,请参阅 令牌服务设置。
如果您想立即使令牌失效,可以使用 使令牌失效 API。
请求正文
编辑以下参数可以在 POST 请求的正文中指定,并且与创建令牌有关
-
grant_type
-
(必需,字符串)授权类型。支持的授权类型有:
password
、_kerberos
、client_credentials
和refresh_token
。-
client_credentials
- 此授权类型实现 OAuth2 的客户端凭据授权。它适用于机器对机器的通信,不适合或不用于令牌的自助用户创建。它仅生成无法刷新的访问令牌。前提是,使用
client_credentials
的实体可以持续访问一组(客户端,而非最终用户)凭据,并且可以随意验证自身身份。 -
_kerberos
- 此授权类型在内部支持并实现基于 SPNEGO 的 Kerberos 支持。
_kerberos
授权类型可能会因版本而异。 -
password
- 此授权类型实现 OAuth2 的资源所有者密码凭据授权。在此授权中,受信任的客户端将最终用户的凭据交换为访问令牌和(可能)刷新令牌。请求需要由经过身份验证的用户发出,但代表另一个经过身份验证的用户(其凭据作为请求参数传递的用户)发出。此授权类型不适合或不用于令牌的自助用户创建。
-
refresh_token
- 此授权类型实现 OAuth2 的刷新令牌授权。在此授权中,用户将先前颁发的刷新令牌交换为新的访问令牌和新的刷新令牌。
-
-
password
- (可选*,字符串)用户的密码。如果指定
password
授权类型,则此参数是必需的。此参数对任何其他受支持的授权类型都无效。 -
kerberos_ticket
- (可选*,字符串)base64 编码的 kerberos 票证。如果指定
_kerberos
授权类型,则此参数是必需的。此参数对任何其他受支持的授权类型都无效。 -
refresh_token
- (可选*,字符串)创建令牌时返回的字符串,可用于延长其寿命。如果指定
refresh_token
授权类型,则此参数是必需的。此参数对任何其他受支持的授权类型都无效。 -
scope
- (可选,字符串)令牌的范围。目前,令牌仅针对
FULL
范围颁发,而与请求中发送的值无关。 -
username
- (可选*,字符串)标识用户的用户名。如果指定
password
授权类型,则此参数是必需的。此参数对任何其他受支持的授权类型都无效。
示例
编辑以下示例使用 client_credentials
授权类型获取令牌,该类型只是作为经过身份验证的用户创建令牌
resp = client.security.get_token( grant_type="client_credentials", ) print(resp)
const response = await client.security.getToken({ grant_type: "client_credentials", }); console.log(response);
POST /_security/oauth2/token { "grant_type" : "client_credentials" }
以下示例输出包含访问令牌、令牌过期的时长(以秒为单位)以及类型
{ "access_token" : "dGhpcyBpcyBub3QgYSByZWFsIHRva2VuIGJ1dCBpdCBpcyBvbmx5IHRlc3QgZGF0YS4gZG8gbm90IHRyeSB0byByZWFkIHRva2VuIQ==", "type" : "Bearer", "expires_in" : 1200, "authentication" : { "username" : "test_admin", "roles" : [ "superuser" ], "full_name" : null, "email" : null, "metadata" : { }, "enabled" : true, "authentication_realm" : { "name" : "file", "type" : "file" }, "lookup_realm" : { "name" : "file", "type" : "file" }, "authentication_type" : "realm" } }
此 API 返回的令牌可以通过发送带有 Authorization
标头的请求来使用,该标头的值具有前缀“Bearer ”,后跟 access_token
的值。
curl -H "Authorization: Bearer dGhpcyBpcyBub3QgYSByZWFsIHRva2VuIGJ1dCBpdCBpcyBvbmx5IHRlc3QgZGF0YS4gZG8gbm90IHRyeSB0byByZWFkIHRva2VuIQ==" https://127.0.0.1:9200/_cluster/health
以下示例使用 password
授权类型为 test_admin
用户获取令牌。此请求需要由具有足够权限的经过身份验证的用户发出,该用户可能与在 username
参数中传递的用户名相同,也可能不同
resp = client.security.get_token( grant_type="password", username="test_admin", password="x-pack-test-password", ) print(resp)
const response = await client.security.getToken({ grant_type: "password", username: "test_admin", password: "x-pack-test-password", }); console.log(response);
POST /_security/oauth2/token { "grant_type" : "password", "username" : "test_admin", "password" : "x-pack-test-password" }
以下示例输出包含访问令牌、令牌过期的时长(以秒为单位)、类型和刷新令牌
{ "access_token" : "dGhpcyBpcyBub3QgYSByZWFsIHRva2VuIGJ1dCBpdCBpcyBvbmx5IHRlc3QgZGF0YS4gZG8gbm90IHRyeSB0byByZWFkIHRva2VuIQ==", "type" : "Bearer", "expires_in" : 1200, "refresh_token": "vLBPvmAB6KvwvJZr27cS", "authentication" : { "username" : "test_admin", "roles" : [ "superuser" ], "full_name" : null, "email" : null, "metadata" : { }, "enabled" : true, "authentication_realm" : { "name" : "file", "type" : "file" }, "lookup_realm" : { "name" : "file", "type" : "file" }, "authentication_type" : "realm" } }
要延长使用 password
授权类型获取的现有令牌的寿命,您可以在令牌创建后的 24 小时内使用刷新令牌再次调用 API。例如
resp = client.security.get_token( grant_type="refresh_token", refresh_token="vLBPvmAB6KvwvJZr27cS", ) print(resp)
const response = await client.security.getToken({ grant_type: "refresh_token", refresh_token: "vLBPvmAB6KvwvJZr27cS", }); console.log(response);
POST /_security/oauth2/token { "grant_type": "refresh_token", "refresh_token": "vLBPvmAB6KvwvJZr27cS" }
该 API 将返回一个新的令牌和刷新令牌。每个刷新令牌只能使用一次。
{ "access_token" : "dGhpcyBpcyBub3QgYSByZWFsIHRva2VuIGJ1dCBpdCBpcyBvbmx5IHRlc3QgZGF0YS4gZG8gbm90IHRyeSB0byByZWFkIHRva2VuIQ==", "type" : "Bearer", "expires_in" : 1200, "refresh_token": "vLBPvmAB6KvwvJZr27cS", "authentication" : { "username" : "test_admin", "roles" : [ "superuser" ], "full_name" : null, "email" : null, "metadata" : { }, "enabled" : true, "authentication_realm" : { "name" : "file", "type" : "file" }, "lookup_realm" : { "name" : "file", "type" : "file" }, "authentication_type" : "token" } }
以下示例使用 kerberos
授权类型获取访问令牌和刷新令牌,该类型只是交换 base64 编码的 kerberos 票证来创建令牌
POST /_security/oauth2/token { "grant_type" : "_kerberos", "kerberos_ticket" : "YIIB6wYJKoZIhvcSAQICAQBuggHaMIIB1qADAgEFoQMCAQ6iBtaDcp4cdMODwOsIvmvdX//sye8NDJZ8Gstabor3MOGryBWyaJ1VxI4WBVZaSn1WnzE06Xy2" }
如果 kerberos 身份验证成功,API 将返回一个新的令牌和刷新令牌。每个刷新令牌只能使用一次。当在 Spnego GSS 上下文中请求相互身份验证时,服务器将在 kerberos_authentication_response_token
中返回一个 base64 编码的令牌,供客户端使用并完成身份验证。
{ "access_token" : "dGhpcyBpcyBub3QgYSByZWFsIHRva2VuIGJ1dCBpdCBpcyBvbmx5IHRlc3QgZGF0YS4gZG8gbm90IHRyeSB0byByZWFkIHRva2VuIQ==", "type" : "Bearer", "expires_in" : 1200, "refresh_token": "vLBPvmAB6KvwvJZr27cS" "kerberos_authentication_response_token": "YIIB6wYJKoZIhvcSAQICAQBuggHaMIIB1qADAg", "authentication" : { "username" : "test_admin", "roles" : [ "superuser" ], "full_name" : null, "email" : null, "metadata" : { }, "enabled" : true, "authentication_realm" : { "name" : "file", "type" : "file" }, "lookup_realm" : { "name" : "file", "type" : "file" }, "authentication_type" : "realm" } }