【问题标题】:Is it possible to implement user based security on Azure Search?是否可以在 Azure 搜索上实现基于用户的安全性?
【发布时间】:2015-10-26 11:43:35
【问题描述】:

在 Azure 搜索中,我们可以为不同的搜索结果创建多个索引,并且我们有两种类型的 api-key。一种用于管理,另一种用于查询。但是使用相同的 api-key 用户可以搜索所有索引。

在我的解决方案中,我需要设计一个系统,以便使用该系统的不同用户会根据他们的权限获得不同的结果。我认为这可以通过每个角色的专用索引来解决,但用户仍然可以根据需要查询其他索引。

我如何确定每个用户只能搜索特定的索引。

【问题讨论】:

    标签: security azure azure-cognitive-search


    【解决方案1】:

    开箱即用无法限制特定索引的密钥使用。您需要自己做一些事情。

    另一种可能性是创建不同的搜索服务帐户,然后在其中创建索引,而不是只有一个帐户。然后,您可以向您的用户授予对相应搜索服务帐户的访问权限。

    更新

    根据您的 cmets,您实际上希望通过用户角色来限制搜索结果(文档),即比索引更深一层。为此,您可以做的是将此角色标准动态附加到您的搜索查询中,如OData Filter。例如,假设您的索引具有每个角色类型(管理员、用户等)的布尔字段,并且用户搜索某个关键字。然后你可以做的是创建一个OData Filter $filter 来检查这些条件。因此,您的搜索 URL 将类似于:

    https://<search-service-name>.search.windows.net/indexes/<index-name>/docs?search=<search-string>&$filter=Administrator%20eq%20true
    

    这样,Search Service 会进行所有过滤,您无需在代码中执行任何操作。

    您可以在此处了解有关查询选项的更多信息:https://msdn.microsoft.com/en-us/library/azure/dn798927.aspx

    【讨论】:

    • 我想创建一个可以在客户端和 Azure 搜索之间工作的 Web 服务。它将从客户那里获取搜索词并通过向其添加 api-key 发送到 Azure 搜索。得到结果后,会根据客户端的角色对结果进行过滤,返回最终结果。通过这种方式,api-key 将对客户端隐藏,因此没有人能够直接从 Azure 搜索服务进行搜索。看起来怎么样?
    • 这会起作用,因为您的应用程序通过仅显示用户有权访问的索引(或多个索引)来限制访问。
    • 实际上只有一个索引。索引将包括一个名为 Roles 的字段,其中将包括哪些角色将有权访问特定文档。我的网络服务将根据角色字段过滤文档。
    • 啊……我明白了。每个文档是否都包含可以访问该文档的“角色”的信息(或名称)?
    • 是的,完全正确。不过,对于大型结果集,它可能会稍微影响整体性能。
    猜你喜欢
    • 2019-05-09
    • 2018-08-23
    • 1970-01-01
    • 2021-08-27
    • 2017-04-02
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 2013-02-09
    相关资源
    最近更新 更多