【问题标题】:Use azure active directory with NEST/Elasticsearch.net将 azure 活动目录与 NEST/Elasticsearch.net 一起使用
【发布时间】:2021-10-13 19:55:57
【问题描述】:

我们正在开展一个项目,我们正在使用 Azure Active Directory 对用户进行身份验证。身份验证成功后,用户的浏览器会收到一个 Id 和访问令牌,然后我们使用相同的访问令牌来查询其他 Microsoft 产品(Sharepoint、OneDrive 等)。

我们计划使用 Elastic Search 来满足我们的搜索需求。我们已经在我们的 ECE 部署门户和集群上设置了 SAML/OpenId 领域。因此,如果任何用户尝试访问 ECE 部署门户/Kibana,系统将提示他们针对 Microsoft Azure AD 进行身份验证,并且在成功身份验证后,他们会被重定向到 ECE 或 Kibana。

我们正在使用 C# 和 NEST dll (ElasticSearch.Net) 创建查询并搜索弹性搜索端点。我们不确定我们应该如何使用在 UI 端接收到的访问令牌和 Elastic Search 来查询索引。我们知道,我们可以使用本机用户凭据或 API 密钥来访问弹性搜索,但我们希望使用相同的 azure 广告身份验证流程 (SAML/OpenID) 来访问弹性搜索。

是否可以使用在 UI 端收到的 Azure AD 访问令牌来访问和查询弹性搜索集群,或者是否有任何其他方式在用户尝试访问弹性搜索集群时重新验证用户身份? 有没有办法通过弹性搜索端点对用户进行身份验证并生成可用于进一步查询弹性搜索的访问令牌?

简而言之,我们想在查询数据时使用 Elastic Search 重新对用户进行身份验证?

var settings = new ConnectionSettings(new Uri(mEsQuerySource.Url));
settings.BasicAuthentication("user", "plain text password");
mClient = new ElasticClient(settings);

【问题讨论】:

标签: elasticsearch azure-active-directory nest


【解决方案1】:

感谢蒂姆通过弹性门户分享解决方案。我在这里更新相同的答案以帮助其他社区成员。

在当前版本的 Elasticsearch 中(在我撰写本文时,7.14 是最新版本),无法使用 Azure AD 访问令牌直接访问 Elasticsearch。
也就是说,您不能让您的应用程序直接向 AAD 进行身份验证,然后使用您从 AAD 收到的令牌作为凭据来向 Elasticsearch 进行身份验证。
Elasticsearch 中没有身份验证提供程序可以处理来自外部颁发者的任意令牌。

但是,您可以执行与 ECE 和 Kibana 相同的操作,并通过 Elasticsearch 执行 SAML 或 OpenID Connect 身份验证,以生成 Elasticsearch 访问和刷新令牌(与 Azure AD 令牌分开)。

有关于如何通过自定义应用程序对 Elasticsearch 执行 SAML 3OIDC 2 身份验证的文档。

高级概述是(我在这里假设 SAML,但 OIDC 会类似):

当用户访问您的应用程序时,他们将照常对 AzureAD 进行身份验证

然后,您将使用 Elasticsearch API 对 Elasticsearch SAML 领域执行额外的身份验证,其中 Elasticsearch 作为服务提供者,AzureAD 作为身份提供者。 由于用户已经在 Azure AD 中进行了身份验证,因此第二个身份验证过程对用户应该是透明的 - AAD 将简单地以 Elasticsearch 作为接收者发出一个新的 SAML 断言。

那些 Elasticsearch API 将接受 SAML 断言,并返回一对可用于向 Elasticsearch 进行身份验证的令牌(访问 + 刷新)

您的应用程序将保留用户会话的访问和刷新令牌

访问 Elasticsearch API 时,访问令牌将用于authenticate

当旧令牌过期(或即将过期)时,刷新令牌将用于generate a new access token

如果您的用户位于 Elasticsearch 可以查询的身份存储中(例如,支持 LDAP 搜索的东西),那么另一种选择是使用 Elasticsearch run-as capability
在这种情况下,您的应用程序将使用单个系统凭据(可能是本机领域中的用户)向 Elasticsearch 进行身份验证。该用户将有权像所有其他用户一样运行,这可用于代表您的最终用户执行搜索,而无需他们直接向 Elasticsearch 进行身份验证。

如果您有擅长编写 Java 的工程师,最后的选择是实现自定义领域

参考:Use azure active directory with NEST/Elasticsearch.net - Elastic Stack / Elasticsearch - Discuss the Elastic Stack

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-03
    • 2015-12-06
    • 1970-01-01
    • 2015-03-26
    • 1970-01-01
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多