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

Reply via email to