c# - 设置安全性后使用 C# 访问弹性搜索
问题描述
我按照此链接设置安全性。这意味着我现在必须在访问时输入用户名和密码:
http://localhost:9200/
让我们说用户名是 un 和pw
is pw234
。我现在如何在我的 C# 代码中使用它。我试过:
public static ElasticClient GetClient(string indexName)
{
var node = new Uri(ConfigurationManager.AppSettings["Search-Uri"]);
var settings = new ConnectionSettings(node)
.DefaultIndex(indexName);
settings.ThrowExceptions(alwaysThrow: true); // I like exceptions
settings.PrettyJson(); // Good for DEBUG
settings.RequestTimeout(TimeSpan.FromSeconds(300));
settings.BasicAuthentication("un", "pw234");
return new ElasticClient(settings);
}
我必须使用 BasicAuthentication 吗?请注意,这绝不是生产代码。我永远不会像这样硬编码用户名和密码。谢谢。
解决方案
基本身份验证是内置用户帐户(本机领域)可以用来进行身份验证的一种身份验证方案。支持其他基于令牌的身份验证服务:
- 使用
Bearer
(身份验证方案)令牌的令牌服务,基于 OAuth2 规范 ApiKey
使用(身份验证方案)令牌的 API 密钥
通常,对于与 Elasticsearch 交互的应用程序(即非用户),您可能会使用这些基于令牌的身份验证服务之一。客户端公开配置 API 密钥以进行身份验证ConnectionSettings
public static ElasticClient GetClient(string indexName)
{
var node = new Uri(ConfigurationManager.AppSettings["Search-Uri"]);
var settings = new ConnectionSettings(node)
.DefaultIndex(indexName)
.ThrowExceptions(alwaysThrow: true) // I like exceptions
.PrettyJson() // Good for DEBUG
.RequestTimeout(TimeSpan.FromSeconds(300))
.ApiKeyAuthentication("<id>", "<api key>");
return new ElasticClient(settings);
}
承载令牌也可以与客户端一起使用,但是没有像基本身份验证和 api 密钥身份验证那样公开设置标头的专用方法,因此.GlobalHeaders()
需要使用ConnectionSettings
基于每个请求(通过)的方法。.RequestConfiguration()
除了原生领域,Elasticsearch 还支持以下领域
- LDAP 用户认证
- Active Directory 用户身份验证
- PKI(客户端证书)用户认证
- 基于文件的用户认证
- SAML 身份验证:旨在与 Kibana 一起用于 SSO
- Kerberos 身份验证
- OpenID 连接身份验证
推荐阅读
- ios - 检测 UITabBarController 的标签栏项目更改
- python - 使用 BeautifulSoup 获取跨度之间的文本
- python - 我不明白这如何通过扩展和附加展平适用于 Python 3.6
- apache-camel - Camel - 流:文件和 ftp 上传
- arrays - O(nlog(n)) 中的最小下一个更大元素
- c# - 从 .Net 应用程序使用 Azure Monitor Rest API
- javascript - 在 React 中操作 SVG 组件
- gnu-screen - GNU 屏幕动态标题
- vba - 附件对象上的另存为生成错误 438 - 对象不支持此属性或方法
- c# - 使用StreamWriter通过文本保存分数时,保存时不显示在电脑上