Hi all,
I'm struggling to configure correctly Knox in order to publish a Nifi cluster.
Currently I'm using the following topologie :
<topology>
<gateway>
<provider>
<role>authentication</role>
<name>ShiroProvider</name>
<enabled>true</enabled>
<param>
<name>sessionTimeout</name>
<value>1800</value>
</param>
LDAP_CFG_REDACTED
<param>
<name>redirectToUrl</name>
<value>/gateway/discovery-preprod/knoxauth/login.html</value>
</param>
<param>
<name>restrictedCookies</name>
<value>rememberme,WWW-Authenticate</value>
</param>
<param>
<name>urls./**</name>
<value>authcBasic</value>
</param>
</provider>
<provider>
<role>federation</role>
<name>SSOCookieProvider</name>
<enabled>true</enabled>
<param>
<name>sso.authentication.provider.url</name>
<value>https://host1.sub.dom.tld:9243/gateway/topologie-name/api/v1/websso</value<https://host1.sub.dom.tld:9243/gateway/topologie-name/api/v1/websso%3c/value>>
</param>
</provider>
<provider>
<role>webappsec</role>
<name>WebAppSec</name>
<enabled>true</enabled>
<param>
<name>csrf.enabled</name>
<value>false</value>
</param>
<param>
<name>csrf.customHeader</name>
<value>X-XSRF-Header</value>
</param>
<param>
<name>csrf.methodsToIgnore</name>
<value>GET,OPTIONS,HEAD</value>
</param>
<param>
<name>xframe.options.enabled</name>
<value>true</value>
</param>
<param>
<name>xss.protection.enabled</name>
<value>false</value>
</param>
<param>
<name>strict.transport.enabled</name>
<value>false</value>
</param>
</provider>
<provider>
<role>identity-assertion</role>
<name>Default</name>
<enabled>true</enabled>
</provider>
<provider>
<role>hostmap</role>
<name>static</name>
<enabled>true</enabled>
<param>
<name>host1.dom2.tld2</name>
<value>host1.sub.dom.tld</value>
</param>
</provider>
<provider>
<role>authorization</role>
<name>XASecurePDPKnox</name>
<enabled>true</enabled>
</provider>
</gateway>
<service>
<role>KNOXSSO</role>
<param>
<name>knoxsso.cookie.secure.only</name>
<value>false</value>
</param>
<param>
<name>knoxsso.enable.session</name>
<value>true</value>
</param>
<param>
<name>knoxsso.token.ttl</name>
<value>360000</value>
</param>
<param>
<name>knoxsso.redirect.whitelist.regex</name>
<value>^/.*$;^https?://(.+\.sub\.dom\.tld|.+\.dom2\.tld2)(:[0-9]+)(/|/.*)?$</value>
</param>
</service>
<service>
<role>NIFI</role>
<url>https://host1.dom2.tld:9091</url<https://host1.dom2.tld:9091%3c/url>>
<url>https://host2.dom2.tld:9091</url<https://host2.dom2.tld:9091%3c/url>>
<url>https://host3.dom2.tld:9091</url<https://host3.dom2.tld:9091%3c/url>>
<param>
<name>useTwoWaySsl</name>
<value>true</value>
</param>
</service>
<application>
<name>knoxauth</name>
</application>
</topology>
Relevant certs are already created and imported (user cert, key and nifi CA
certificate) in gateway.jks. I set up proxy host, path and knox params in
nifi.properties and disabled other users sources (empty
nifi.security.user.login.identity.provider).
I can successfully authenticate in Nifi with generated certs, so Ranger policy
seems correct.
I observed the following behavior when I enter
https://host1.sub.dom.tld:9243/gateway/topologie-name/nifi-app/nifi :
* Without modification to service.xml:
* Knox redirects the user to
https://host1.sub.dom.tld:9243/gateway/topologie-name/knoxauth/login.html (no
request forwarding to the backend)
* If I manually add
?OriginalUrl=https://host1.sub.dom.tld:9243/gateway/topologie-name/nifi-app/access/knox/callback
. Knox redirects me again to
https://host1.sub.dom.tld:9243/gateway/topologie-name/knoxauth/login.html after
the login attempt
* If I add <policy role="authentication" name="Anonymous" /> in
service.xml: Knox forwards the request to Nifi which finally redirects my
browser under
https://host1.sub.dom.tld:9243/gateway/topologie-name/knoxauth/login.html?OriginalUrl=https://host1.sub.dom.tld:9243/gateway/topologie-name/nifi-app/access/knox/callback
then Nifi redirects back my browser via Knox to the same URL when I
authenticate because in subsequent calls Knox resolve the user to anonymous
(?doAs=anonymous).
I have seen this policy defined for others services like ambari, Yarnuiv2 when
they use tokens provided by knox.
Knox is version 1.0 and Nifi 1.9.
Regards