基于令牌的身份验证服务

编辑

Elastic Stack 安全功能通过使用 realm 和一个或多个基于令牌的身份验证服务来验证用户身份。基于令牌的身份验证服务用于身份验证和管理令牌。您可以将这些令牌附加到发送到 Elasticsearch 的请求中,并将它们用作凭据。当 Elasticsearch 收到必须进行身份验证的请求时,它会首先查询基于令牌的身份验证服务,然后查询 realm 链。

安全功能提供了以下内置的基于令牌的身份验证服务,它们按查询顺序排列:

service-accounts(服务账户)

服务账户使用 创建服务账户令牌 APIelasticsearch-service-tokens CLI 工具生成服务账户令牌。

要使用服务账户令牌,请在请求中包含生成的令牌值,并使用 Authorization: Bearer 标头。

curl -H "Authorization: Bearer AAEAAWVsYXN0aWMvZ...mXQtc2VydmMTpyNXdkYmRib1FTZTl2R09Ld2FKR0F3" https://127.0.0.1:9200/_cluster/health

不要尝试使用服务账户来验证单个用户的身份。服务账户只能使用服务令牌进行身份验证,服务令牌不适用于普通用户。

token-service(令牌服务)

令牌服务使用 获取令牌 API 来生成基于 OAuth2 规范的访问令牌和刷新令牌。访问令牌是一个短期令牌。默认情况下,它在 20 分钟后过期,但可以配置为最多持续 1 小时。可以使用刷新令牌刷新它,刷新令牌的有效期为 24 小时。访问令牌是一个持有者令牌。您可以通过发送带有 Authorization 标头的请求来使用它,该标头的值具有前缀“Bearer ”,后跟访问令牌的值。例如:

curl -H "Authorization: Bearer dGhpcyBpcyBub3Qx5...F0YS4gZG8gbm90IHRyeSB0byByZWFkIHRva2VuIQ==" https://127.0.0.1:9200/_cluster/health
api-key-service(API 密钥服务)

API 密钥服务使用 创建 API 密钥 API 来生成 API 密钥。默认情况下,API 密钥不会过期。当您发出创建 API 密钥的请求时,您可以指定 API 密钥的过期时间和权限。权限受已验证用户的权限限制。您可以通过发送带有 Authorization 标头的请求来使用 API 密钥,该标头的值具有前缀“ApiKey ”,后跟凭据。凭据是 API 密钥 ID 和 API 密钥的 base64 编码,它们之间用冒号连接。例如:

curl -H "Authorization: ApiKey VnVhQ2ZHY0JDZGJrU...W0tZTVhT3g6dWkybHAyYXhUTm1zeWFrd0dk5udw==" https://127.0.0.1:9200/_cluster/health

根据您的用例,您可能需要决定这些服务生成的令牌的生命周期。然后,您可以使用此信息来决定使用哪个服务来生成和管理令牌。非过期的 API 密钥可能看起来是简单的选择,但您必须考虑非过期密钥带来的安全隐患。token-serviceapi-key-service 都允许您使令牌失效。请参阅 使令牌 API 失效使 API 密钥 API 失效

通过 JWT 身份验证,Elasticsearch 8.2 中引入了对 JWT 持有者令牌的身份验证支持,该支持无法通过令牌身份验证服务启用。Realm 提供了零个、一个或多个 JWT realm 的灵活顺序和配置。