我正在尝试做一个POC,我需要通过Apache Knox保护我的集群,而我自己开发的rest API将位于Knox后面。用户身份验证应如何与 Knox Ranger 配合使用,我将如何保护我的数据访问?
让我们从服务.xml文件开始。它可能看起来像下面更简单的版本。仅当您需要将特定规则应用于请求或响应的特定部分时,才需要更复杂的表单。请注意,理想情况下只需要一条路由,但 Knox 中的**
表示一个或多个路径级别(不是零或多个)。因此,如果没有第一条路由,Knox 不会将请求发送到服务的根/Test_Web_App 路径。
<service role="TEST_WEB_APP" name="Test_Web_App" version="0.0.1">
<routes>
<route path="/Test_Web_App/?**">
<route path="/Test_Web_App/**?**">
</routes>
</service>
如果你想非常具体地说明它,这将是等效的。在这里,<rewrite apply="">
标识重写中的特定命名规则.xml <rewrite to="">
标识规则应应用于请求和/或响应的哪个部分。
<service role="TEST_WEB_APP" name="Test_Web_App" version="0.0.1">
<routes>
<route path="/Test_Web_App/?**">
<rewrite apply="TEST_WEB_APP/Test_Web_App" to="request.url"/>
</route>
<route path="/Test_Web_App/**?**">
<rewrite apply="TEST_WEB_APP/Test_Web_App/query" to="request.url"/>
</route>
</routes>
</service>
现在进行重写.xml。你的非常接近。我添加的只是一个名称(即路径),导致对第二条规则的模式和模板{path=**}
。在<rule pattern="">
中,这用于为从匹配模式中提取的值命名。在<rewrite template="">
中,名称用于使用从匹配模式中提取的命名值填充正在创建的 URL 的一部分。
<rules>
<rule dir="IN" name="TEST_WEB_APP/Test_Web_App" pattern="*://*:*/**/Test_Web_App/?{**}">
<rewrite template="{$serviceUrl[TEST_WEB_APP]}/?{**}"/>
</rule>
<rule dir="IN" name="TEST_WEB_APP/Test_Web_App/query" pattern="*://*:*/**/Test_Web_App/{path=**}?{**}">
<rewrite template="{$serviceUrl[TEST_WEB_APP]/{path=**}?{**}"/>
</rule>
</rules>
为 Apache Knox 提供自定义 REST API 的服务定义。这将允许诺克斯:
- 识别 API 的 URL 传入到基于 Spring 的服务的请求,并能够将请求路由到它
- 了解如何从响应中重写特定内容(如 URL 或其他敏感内容),以便在适当时将客户端重定向回网关。
请参阅:开发人员指南中的 http://knox.apache.org/books/knox-0-7-0/dev-guide.html#Service+Definition+Files,了解如何提供服务定义。
服务定义到位后,您只需在 Knox 拓扑中添加一个 <service>
元素,以指示实际基于 Spring 的服务运行的位置。它会是这样的:
<service>
<role>SERVICE</role>
<url>http://url.to.your.service/v1/...</url>
</service>
开发人员指南的同一部分中也对此进行了描述。您可能还会发现用户指南有助于拓扑中服务声明的其他示例。
您可以查看这些示例,并将其与这些现有服务的服务定义文件进行比较,以了解服务角色的映射方式。这将帮助您对自己的服务执行相同的操作。
有关身份验证详细信息,请参阅用户指南中的 http://knox.apache.org/books/knox-0-7-0/user-guide.html#Authentication,以获取有关设置基于 LDAP 的身份验证的说明。您可能还对其他身份验证和联合身份验证提供程序实现感兴趣。您也可以在用户指南中找到它们。
您也可以随意参与Apache Knox的开发或用户电子邮件列表。
这些是我的 2 个 xml 文件,如果我有任何错误或我需要做什么,请查看它 **重写.xml
<rule dir="IN" name="TEST_WEB_APP/Test_Web_App" pattern="*://*:*/**/Test_Web_App/?{**}">
<rewrite template="{$serviceUrl[TEST_WEB_APP]}/?{**}"/>
</rule>
<rule dir="IN" name="TEST_WEB_APP/Test_Web_App/query" pattern="*://*:*/**/Test_Web_App/{**}?{**}">
<rewrite template="{$serviceUrl[TEST_WEB_APP]/{**}?{**}"/>
</rule>
</rules>
**service.xml
<service role="TEST_WEB_APP" name="Test_Web_App" version="0.0.1">
<routes>
<route path="/Test_Web_App/**">
<rewrite apply="TEST_WEB_APP/Test_Web_App/**" to="response.body" />
</route>
<route path="/Test_Web_App/**?**">
<rewrite apply="TEST_WEB_APP/Test_Web_App/**?**" to="response.body"/>
</routes>
</service>