<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>article QlikView and Authentication in Official Support Articles</title>
    <link>https://community.qlik.com/t5/Official-Support-Articles/QlikView-and-Authentication/ta-p/1715897</link>
    <description>&lt;P&gt;Authentication&amp;nbsp;of&amp;nbsp;end&amp;nbsp;users&amp;nbsp;is, with&amp;nbsp;exception&amp;nbsp;of&amp;nbsp;the&amp;nbsp;built-in&amp;nbsp;Custom&amp;nbsp;Users,&amp;nbsp;handled&amp;nbsp;in the QlikView authentication module. Through this design QlikView doesn’t handle authentication in itself. Instead, it relies on external 3&lt;SUP&gt;rd&lt;/SUP&gt;&amp;nbsp;party for performing the actual step of validating a user credentials.&lt;/P&gt;
&lt;P&gt;This approach to handling credentials also means that QlikView doesn’t have its own way of enforcing a password policy. The authentication method configured will utilize an existing credentials store, which in itself needs to apply the applicable password policy. Additionally, QlikView relies on it for keeping track of failed user login attempts. Should brute force attacks be a genuine concern it is recommended that restrictions on the number of failed logins are implemented in the backend credential checker.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H4&gt;Environment&lt;/H4&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;LI-PRODUCT title="QlikView" id="qlikView"&gt;&lt;/LI-PRODUCT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Log in&lt;/H3&gt;
&lt;P&gt;The administrator of a QlikView deployment can create and deploy a custom authentication module, tailored to any specific requirements that may be needed. By default, the following are the options that QlikView is offering:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;NTLM authentication&lt;/LI&gt;
&lt;LI&gt;Anonymous authentication&lt;/LI&gt;
&lt;LI&gt;Header authentication&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;When performing a log in, QlikView will not actively show the end-user any information about last successful or last failed login. This is not considered a feature that QlikView should support. The logs will contain traces of which user logs in when, and should be audited by the administrator for suspected behavior. Should a feature of presenting the user with information during login be a requirement, it can always be implemented using a custom authentication module. By building the authentication module from the ground up, any interaction with the user pre/post authentication can be added by the administrator.&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Log out&lt;/H3&gt;
&lt;P&gt;A part of authentication is the ability to not be authenticated anymore, i.e. log out. The user will always have the ability to log out, with one limitation related to the NTLM authentication mode. If that case, the user logs out, and if refreshing the page, the browser will utilize its internally cached session and log the user back in automatically. Although this is something that is out of the direct control of QlikView, the behavior can be mitigated. The administrator would have to configure QlikView through the QMV to use the HTML form login method.&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Authentication methods&lt;/H3&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;NTLM&lt;/H3&gt;
&lt;P&gt;By default, the authentication system used is NTLM based, meaning that the system will ask the user to authenticate through the network Active Directory or local system account.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Web form authentication&lt;/H3&gt;
&lt;P&gt;In QlikView prior to version 11.20 SR3, the web form login method used HTTP BASIC&amp;nbsp;authentication. In 11.20 SR3 this was upgraded to a more secure method of authenticating the user, which instead was designed to be based on NTLM authentication.&lt;/P&gt;
&lt;P&gt;The main reason for this change was that by using NTLM authentication the user credentials would be handled in a more secure way. This is due to the NTLM method sending the credentials by POST, while HTTP BASIC sends them as part of a HTTP BASIC header. Also, web browsers are caching HTTP BASIC information, which meant that users who logged out would be able to log back in automatically without having to specify credentials.&lt;/P&gt;
&lt;P&gt;When using “Authentication - Type - Custom User” and “Login Address - Alternate login page (web form)”, the login page “FormLogin.htm” will be applied instead of “login2.htm”. This means that customers using customized login pages built on “login2.htm” have to migrate to customized version of “FormLogin.htm”.&lt;/P&gt;
&lt;P&gt;The web form login page has in older versions of QlikView included an autocomplete ability on the input fields. This has subsequently been fixed and should this be a concern, it is recommended that QlikView is upgraded to a later version.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Anonymous authentication&lt;/H3&gt;
&lt;P&gt;This will allow a user to access information in QlikView without having to authenticate. This is normally something that is enabled on installations that will cater to a large audience of users and only present non-sensitive data.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Header authentication&lt;/H3&gt;
&lt;P&gt;Header authentication should not be used standalone. Instead it is a way for allowing a reverse proxy to sit between the user and QlikView. The reverse proxy would then be in control of authenticating the user, and when satisfied, inject a specific header to identify the user towards QlikView.&lt;/P&gt;
&lt;P&gt;QlikView would in this setup never be reached directly by the end-user.&lt;/P&gt;
&lt;P&gt;To enable header authentication, the administrator needs to navigate to the QMC. Under "QlikView Web Servers", the webserver in question should be selected. In the tab "Authentication", choose the option "Header" in the "Type" radio-button choice. Make sure to specify "Header name" and/or "Prefix" in the form input under "Parameters". &lt;STRONG&gt;Note, only a single Prefix value may be specified, so if multiple domains/directories are in use, that will have to be resolved in the front-end SSO solution in these cases, as QVWS settings will only accommodate a single Prefix value.&amp;nbsp; Multiple QVWS resources could be used in this case to solve the issue as well, one for each domain and the front-end would need to resolve which QVWS instance to send the user based upon their domain/directory.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Custom Header Authentication.png" style="width: 999px;"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/54723i44F1B7AD9770D8BF/image-size/large?v=v2&amp;amp;px=999" role="button" title="Custom Header Authentication.png" alt="Custom Header Authentication.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In this example, the header name "ntuserdomainid" has been chosen, but the administrator is free to set this according to needs. Important to note however is that the name must be used consistently throughout the configuration.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The settings made in the QMC will be reflected in the web server configuration file:&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="AuthenticationHeaderDelimeter.png" style="width: 999px;"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/54724i252B38D6E7365352/image-size/large?v=v2&amp;amp;px=999" role="button" title="AuthenticationHeaderDelimeter.png" alt="AuthenticationHeaderDelimeter.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;The xml configuration "&amp;lt;AuthenticationHeaderDelimiter&amp;gt;:&amp;lt;/AuthenticationHeaderDelimiter&amp;gt;" will allow the administrator to specify how the domain and user values are delimited. This is especially important when deploying QlikView behind a SiteMinder reverse proxy. The SiteMinder proxy will use the character ":" instead of the usual "/", which means that the xml setting above is necessary to integrate with SiteMinder.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Configure IIS for header authentication&lt;/H3&gt;
&lt;P&gt;When deploying through IIS instead of the QlikView Web Server, the following settings are needed.&lt;/P&gt;
&lt;P&gt;Make sure that “Authentication” option “Anonymous Authentication” is set to “Enable“ and all other authentication options are set to “Disabled” for:&lt;/P&gt;
&lt;P&gt;The files:&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;&lt;SPAN&gt;AccessPoint.aspx&lt;BR /&gt;Authenticate.aspx&lt;BR /&gt;QvsViewClient.aspx&lt;/SPAN&gt;&lt;/FONT&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The folders:&lt;/SPAN&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;&lt;SPAN&gt;QvAjaxZfc/&lt;BR /&gt;QlikView/&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="IIS Authentication Settings.png" style="width: 999px;"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/54725i125728614EF77D1A/image-size/large?v=v2&amp;amp;px=999" role="button" title="IIS Authentication Settings.png" alt="IIS Authentication Settings.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Limitations in the Header Authentication feature&lt;/H3&gt;
&lt;P&gt;If the Authentication type option is modified in the QMC, the manually configured setting &amp;lt;AuthenticationHeaderDelimiter&amp;gt; will be deleted from the web server configuration file. As a consequence, the setting must be manually re-set again in the configuration file after that the Header authentication type option is re-selected in the QMC.&lt;/P&gt;
&lt;P&gt;It is also highly recommended that HEADER authentication is deployed with authorization setting DMS in the QMC, see figure 1. The recommendation is based on possible problems that could be caused by applying NTFS authorization combined with HEADER authentication.&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DMS authorization checkbox.png" style="width: 999px;"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/54726i1FDDF10CC330CD93/image-size/large?v=v2&amp;amp;px=999" role="button" title="DMS authorization checkbox.png" alt="DMS authorization checkbox.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Make sure that the original and unmodified Authenticate.asp(x) is located in&amp;nbsp;&lt;FONT face="courier new,courier"&gt;&lt;SPAN&gt;%PROGRAMFILES%\QlikView\Server\QlikViewClients\QlikViewAjax&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;This is an example (default) &lt;FONT face="courier new,courier"&gt;Authentication.aspx:&lt;/FONT&gt;&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;&amp;lt;%@ Import Namespace="QlikView.AccessPoint" %&amp;gt;

&amp;lt;%@ Import Namespace="QlikView.AccessPoint.HttpInterfaces" %&amp;gt;

&amp;lt;%@ Import Namespace="QvIISWebServer" %&amp;gt;

&amp;lt;%@ Page Language="C#" AutoEventWireup="true" %&amp;gt;

&amp;lt;script runat="server"&amp;gt;
    protected void Page_Load(object sender, EventArgs e) {
        Response.Clear();
        Context context = this.GetContext();
        context.Response.AddVersionHeader();
    PIX.QVWebServer.HeaderAuthentication headerAuthentication = context.Settings.Authentication.HeaderAuthentications.Find(a =&amp;gt; a.Url.EndsWith("/QvAJAXZfc/Authenticate.aspx", StringComparison.InvariantCultureIgnoreCase));
        if (headerAuthentication != null)
        {
           QlikView.AccessPoint.User.HeaderAuthentication(context, headerAuthentication.Header, headerAuthentication.Prefix);
           return;
        }
       
    PIX.QVWebServer.DSCAuthentication customUserAuthentication = context.Settings.Authentication.DSCAuthentications.Find(a =&amp;gt; a.Url.EndsWith("/QvAJAXZfc/Authenticate.aspx", StringComparison.InvariantCultureIgnoreCase));
        if (customUserAuthentication != null) {
            string loginAddress = context.Settings.Authentication.LoginAddress.ToLower();
            if (loginAddress == "/qlikview/login.htm" || (loginAddress != "/qlikview/formlogin.htm" &amp;amp;&amp;amp; context.Settings.Authentication.BasicAuthenticationForCustomLogin))
            {
                //either default login page or a custom login page (=not alternate) that use basic authentication
                QlikView.AccessPoint.User.ServiceAuthentication(context, customUserAuthentication.Prefix);
            }
            else
            {
                QlikView.AccessPoint.User.WebFormAuthentication(context, customUserAuthentication.Prefix);
            }
            return;
        }
        if (context.Settings.Authentication.LoginAddress != "/qlikview/login.htm")
        {
           QlikView.AccessPoint.User.WebFormAuthentication(context);
        }
        else
        {
            QlikView.AccessPoint.User.HttpAuthentication(context);         
        }
    }
&amp;lt;/script&amp;gt;&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Authentication redirect filtering&lt;/H3&gt;
&lt;P&gt;To protect Authenticate.aspx against unsafe redirect abuses, protection mechanism has been implemented which enables QV administrators to specify a trusted host list, to which the clients are allowed to be redirected. This is based on URLs provided in the try and back arguments.&lt;/P&gt;
&lt;P&gt;A redirect abuse issue is a scenario where an attacker utilizes an URL trusted by a victim, but modifies it to redirect the victim to a site controlled by the attacker.&lt;/P&gt;
&lt;P&gt;As an example, the following URL has been modified to redirect the user of it to&amp;nbsp;malicioussite.com.&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&lt;SPAN&gt;&lt;A href="http://trustedcompany.com/QvAJAXZfc/Authenticate.aspx?type=html&amp;amp;webticket=2&amp;amp;try=1&amp;amp;back=&amp;nbsp;http://malicioussite.com/loginpage.htm" target="_blank"&gt;http://trustedcompany.com/QvAJAXZfc/Authenticate.aspx?type=html&amp;amp;webticket=2&amp;amp;try=1&amp;amp;back=&amp;nbsp;http://malicioussite.com/loginpage.htm&lt;/A&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;When accessing the link, which visually looks authentic, a redirect to http://&amp;nbsp;malicioussite.com/loginpage.htm&amp;nbsp;will be made by the QV webserver, because the provided webticket in the URL is invalid. The malicious site now controls the user and can do anything, such as disguising itself as the authentic site to trick the user into typing in valid credentials to the original site.&lt;/P&gt;
&lt;P&gt;By default, there is no filtering on the “try” and “back” parameters when accessing Authenticate.aspx. If filtering is deemed necessary, the file “config.xml” located in “%PROGRAMDATA%\QlikTech\WebServer” needs to be updated.&lt;/P&gt;
&lt;P&gt;The filtering can be enabled in the config.xml file in two ways; normal and strict filtering.&lt;/P&gt;
&lt;P&gt;Normal filtering is enabled using the setting “SafeForwardList” coupled with one or several “TrustedHost” elements. By enabling this, the specified host or domain name IP will be resolved and used when redirecting.&lt;/P&gt;
&lt;P&gt;Restrictions and considerations to take into account when configuring filtering:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;QVWS host is always considered as trusted host.&lt;/LI&gt;
&lt;LI&gt;TrustedHost can be entered as an IP address, domain or hostname.&lt;/LI&gt;
&lt;LI&gt;Host and domain names are case insensitive.&lt;/LI&gt;
&lt;LI&gt;Redirects to loopback address is prohibited unless specified in the Settings.&lt;/LI&gt;
&lt;LI&gt;Only absolute URLs/paths are accepted in the try and back arguments when filtering is enabled.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Strict filtering is a variant of the filtering that takes the specified hosts literally. This mean that while normal filtering will accept any IP that answers to the specified host or domain name, the strict filtering will only redirect to the specified host or domain name. The strict filtering is recommended to be used if the DNS is not trusted or configured to reply with multiple IPs for a specified name.&lt;/P&gt;
&lt;P&gt;Filtering examples:&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;&amp;lt;Authentication&amp;gt;
&amp;lt;SafeForwardList&amp;gt;
&amp;lt;TrustedHost&amp;gt;qlikserver.com&amp;lt;/TrustedHost&amp;gt;
&amp;lt;TrustedHost&amp;gt;qliktechserver.com&amp;lt;/TrustedHost&amp;gt;
&amp;lt;TrustedHost&amp;gt;10.22.33.44&amp;lt;/TrustedHost&amp;gt;
&amp;lt;/SafeForwardList&amp;gt;
&amp;lt;/Authentication&amp;gt;&lt;/LI-CODE&gt;
&lt;P&gt;&lt;SPAN&gt;This setting will make sure to only redirect to hosts&amp;nbsp;&lt;A href="http://qlikserver.com/" target="_blank" rel="noopener" data-cke-saved-href="http://qlikserver.com/"&gt;qlikserver.com&lt;/A&gt;,&amp;nbsp;&lt;A href="http://qliktechserver.com/" target="_blank" rel="noopener" data-cke-saved-href="http://qliktechserver.com/"&gt;qliktechserver.com&lt;/A&gt;&amp;nbsp;and IP “10.22.33.44”. The IP’s that the hostnames resolve to will also be allowed.&lt;/SPAN&gt;&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;&amp;lt;Authentication&amp;gt;
&amp;lt;SafeForwardList&amp;gt;
&amp;lt;TrustedHost&amp;gt; qlikserver.com&amp;lt;/TrustedHost&amp;gt;
&amp;lt;/SafeForwardList&amp;gt;
&amp;lt;/Authentication&amp;gt;&lt;/LI-CODE&gt;
&lt;P&gt;This will allow the hostname&amp;nbsp;&lt;A href="http://qlikserver.com/" target="_blank" rel="noopener" data-cke-saved-href="http://qlikserver.com/"&gt;qlikserver.com&lt;/A&gt;&amp;nbsp;and any IP that it resolves to.&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;&amp;lt;Authentication&amp;gt;
&amp;lt;StrictSafeForwardList&amp;gt;
&amp;lt;TrustedHost&amp;gt;qlikserver.com&amp;lt;/TrustedHost&amp;gt;
&amp;lt;/StrictSafeForwardList&amp;gt;
&amp;lt;/Authentication&amp;gt;&lt;/LI-CODE&gt;
&lt;P&gt;This will only allow redirects to the hostname&amp;nbsp;&lt;A href="http://qlikserver.com/" target="_blank" rel="noopener" data-cke-saved-href="http://qlikserver.com/"&gt;qlikserver.com&lt;/A&gt;, regardless of the IP(s) it resolves to.&lt;/P&gt;</description>
    <pubDate>Tue, 11 May 2021 13:18:09 GMT</pubDate>
    <dc:creator>Sonja_Bauernfeind</dc:creator>
    <dc:date>2021-05-11T13:18:09Z</dc:date>
    <item>
      <title>QlikView and Authentication</title>
      <link>https://community.qlik.com/t5/Official-Support-Articles/QlikView-and-Authentication/ta-p/1715897</link>
      <description>&lt;P&gt;Authentication&amp;nbsp;of&amp;nbsp;end&amp;nbsp;users&amp;nbsp;is, with&amp;nbsp;exception&amp;nbsp;of&amp;nbsp;the&amp;nbsp;built-in&amp;nbsp;Custom&amp;nbsp;Users,&amp;nbsp;handled&amp;nbsp;in the QlikView authentication module. Through this design QlikView doesn’t handle authentication in itself. Instead, it relies on external 3&lt;SUP&gt;rd&lt;/SUP&gt;&amp;nbsp;party for performing the actual step of validating a user credentials.&lt;/P&gt;
&lt;P&gt;This approach to handling credentials also means that QlikView doesn’t have its own way of enforcing a password policy. The authentication method configured will utilize an existing credentials store, which in itself needs to apply the applicable password policy. Additionally, QlikView relies on it for keeping track of failed user login attempts. Should brute force attacks be a genuine concern it is recommended that restrictions on the number of failed logins are implemented in the backend credential checker.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H4&gt;Environment&lt;/H4&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;LI-PRODUCT title="QlikView" id="qlikView"&gt;&lt;/LI-PRODUCT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Log in&lt;/H3&gt;
&lt;P&gt;The administrator of a QlikView deployment can create and deploy a custom authentication module, tailored to any specific requirements that may be needed. By default, the following are the options that QlikView is offering:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;NTLM authentication&lt;/LI&gt;
&lt;LI&gt;Anonymous authentication&lt;/LI&gt;
&lt;LI&gt;Header authentication&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;When performing a log in, QlikView will not actively show the end-user any information about last successful or last failed login. This is not considered a feature that QlikView should support. The logs will contain traces of which user logs in when, and should be audited by the administrator for suspected behavior. Should a feature of presenting the user with information during login be a requirement, it can always be implemented using a custom authentication module. By building the authentication module from the ground up, any interaction with the user pre/post authentication can be added by the administrator.&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Log out&lt;/H3&gt;
&lt;P&gt;A part of authentication is the ability to not be authenticated anymore, i.e. log out. The user will always have the ability to log out, with one limitation related to the NTLM authentication mode. If that case, the user logs out, and if refreshing the page, the browser will utilize its internally cached session and log the user back in automatically. Although this is something that is out of the direct control of QlikView, the behavior can be mitigated. The administrator would have to configure QlikView through the QMV to use the HTML form login method.&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Authentication methods&lt;/H3&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;NTLM&lt;/H3&gt;
&lt;P&gt;By default, the authentication system used is NTLM based, meaning that the system will ask the user to authenticate through the network Active Directory or local system account.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Web form authentication&lt;/H3&gt;
&lt;P&gt;In QlikView prior to version 11.20 SR3, the web form login method used HTTP BASIC&amp;nbsp;authentication. In 11.20 SR3 this was upgraded to a more secure method of authenticating the user, which instead was designed to be based on NTLM authentication.&lt;/P&gt;
&lt;P&gt;The main reason for this change was that by using NTLM authentication the user credentials would be handled in a more secure way. This is due to the NTLM method sending the credentials by POST, while HTTP BASIC sends them as part of a HTTP BASIC header. Also, web browsers are caching HTTP BASIC information, which meant that users who logged out would be able to log back in automatically without having to specify credentials.&lt;/P&gt;
&lt;P&gt;When using “Authentication - Type - Custom User” and “Login Address - Alternate login page (web form)”, the login page “FormLogin.htm” will be applied instead of “login2.htm”. This means that customers using customized login pages built on “login2.htm” have to migrate to customized version of “FormLogin.htm”.&lt;/P&gt;
&lt;P&gt;The web form login page has in older versions of QlikView included an autocomplete ability on the input fields. This has subsequently been fixed and should this be a concern, it is recommended that QlikView is upgraded to a later version.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Anonymous authentication&lt;/H3&gt;
&lt;P&gt;This will allow a user to access information in QlikView without having to authenticate. This is normally something that is enabled on installations that will cater to a large audience of users and only present non-sensitive data.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Header authentication&lt;/H3&gt;
&lt;P&gt;Header authentication should not be used standalone. Instead it is a way for allowing a reverse proxy to sit between the user and QlikView. The reverse proxy would then be in control of authenticating the user, and when satisfied, inject a specific header to identify the user towards QlikView.&lt;/P&gt;
&lt;P&gt;QlikView would in this setup never be reached directly by the end-user.&lt;/P&gt;
&lt;P&gt;To enable header authentication, the administrator needs to navigate to the QMC. Under "QlikView Web Servers", the webserver in question should be selected. In the tab "Authentication", choose the option "Header" in the "Type" radio-button choice. Make sure to specify "Header name" and/or "Prefix" in the form input under "Parameters". &lt;STRONG&gt;Note, only a single Prefix value may be specified, so if multiple domains/directories are in use, that will have to be resolved in the front-end SSO solution in these cases, as QVWS settings will only accommodate a single Prefix value.&amp;nbsp; Multiple QVWS resources could be used in this case to solve the issue as well, one for each domain and the front-end would need to resolve which QVWS instance to send the user based upon their domain/directory.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Custom Header Authentication.png" style="width: 999px;"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/54723i44F1B7AD9770D8BF/image-size/large?v=v2&amp;amp;px=999" role="button" title="Custom Header Authentication.png" alt="Custom Header Authentication.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In this example, the header name "ntuserdomainid" has been chosen, but the administrator is free to set this according to needs. Important to note however is that the name must be used consistently throughout the configuration.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The settings made in the QMC will be reflected in the web server configuration file:&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="AuthenticationHeaderDelimeter.png" style="width: 999px;"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/54724i252B38D6E7365352/image-size/large?v=v2&amp;amp;px=999" role="button" title="AuthenticationHeaderDelimeter.png" alt="AuthenticationHeaderDelimeter.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;The xml configuration "&amp;lt;AuthenticationHeaderDelimiter&amp;gt;:&amp;lt;/AuthenticationHeaderDelimiter&amp;gt;" will allow the administrator to specify how the domain and user values are delimited. This is especially important when deploying QlikView behind a SiteMinder reverse proxy. The SiteMinder proxy will use the character ":" instead of the usual "/", which means that the xml setting above is necessary to integrate with SiteMinder.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Configure IIS for header authentication&lt;/H3&gt;
&lt;P&gt;When deploying through IIS instead of the QlikView Web Server, the following settings are needed.&lt;/P&gt;
&lt;P&gt;Make sure that “Authentication” option “Anonymous Authentication” is set to “Enable“ and all other authentication options are set to “Disabled” for:&lt;/P&gt;
&lt;P&gt;The files:&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;&lt;SPAN&gt;AccessPoint.aspx&lt;BR /&gt;Authenticate.aspx&lt;BR /&gt;QvsViewClient.aspx&lt;/SPAN&gt;&lt;/FONT&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The folders:&lt;/SPAN&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;&lt;SPAN&gt;QvAjaxZfc/&lt;BR /&gt;QlikView/&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="IIS Authentication Settings.png" style="width: 999px;"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/54725i125728614EF77D1A/image-size/large?v=v2&amp;amp;px=999" role="button" title="IIS Authentication Settings.png" alt="IIS Authentication Settings.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Limitations in the Header Authentication feature&lt;/H3&gt;
&lt;P&gt;If the Authentication type option is modified in the QMC, the manually configured setting &amp;lt;AuthenticationHeaderDelimiter&amp;gt; will be deleted from the web server configuration file. As a consequence, the setting must be manually re-set again in the configuration file after that the Header authentication type option is re-selected in the QMC.&lt;/P&gt;
&lt;P&gt;It is also highly recommended that HEADER authentication is deployed with authorization setting DMS in the QMC, see figure 1. The recommendation is based on possible problems that could be caused by applying NTFS authorization combined with HEADER authentication.&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DMS authorization checkbox.png" style="width: 999px;"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/54726i1FDDF10CC330CD93/image-size/large?v=v2&amp;amp;px=999" role="button" title="DMS authorization checkbox.png" alt="DMS authorization checkbox.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Make sure that the original and unmodified Authenticate.asp(x) is located in&amp;nbsp;&lt;FONT face="courier new,courier"&gt;&lt;SPAN&gt;%PROGRAMFILES%\QlikView\Server\QlikViewClients\QlikViewAjax&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;This is an example (default) &lt;FONT face="courier new,courier"&gt;Authentication.aspx:&lt;/FONT&gt;&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;&amp;lt;%@ Import Namespace="QlikView.AccessPoint" %&amp;gt;

&amp;lt;%@ Import Namespace="QlikView.AccessPoint.HttpInterfaces" %&amp;gt;

&amp;lt;%@ Import Namespace="QvIISWebServer" %&amp;gt;

&amp;lt;%@ Page Language="C#" AutoEventWireup="true" %&amp;gt;

&amp;lt;script runat="server"&amp;gt;
    protected void Page_Load(object sender, EventArgs e) {
        Response.Clear();
        Context context = this.GetContext();
        context.Response.AddVersionHeader();
    PIX.QVWebServer.HeaderAuthentication headerAuthentication = context.Settings.Authentication.HeaderAuthentications.Find(a =&amp;gt; a.Url.EndsWith("/QvAJAXZfc/Authenticate.aspx", StringComparison.InvariantCultureIgnoreCase));
        if (headerAuthentication != null)
        {
           QlikView.AccessPoint.User.HeaderAuthentication(context, headerAuthentication.Header, headerAuthentication.Prefix);
           return;
        }
       
    PIX.QVWebServer.DSCAuthentication customUserAuthentication = context.Settings.Authentication.DSCAuthentications.Find(a =&amp;gt; a.Url.EndsWith("/QvAJAXZfc/Authenticate.aspx", StringComparison.InvariantCultureIgnoreCase));
        if (customUserAuthentication != null) {
            string loginAddress = context.Settings.Authentication.LoginAddress.ToLower();
            if (loginAddress == "/qlikview/login.htm" || (loginAddress != "/qlikview/formlogin.htm" &amp;amp;&amp;amp; context.Settings.Authentication.BasicAuthenticationForCustomLogin))
            {
                //either default login page or a custom login page (=not alternate) that use basic authentication
                QlikView.AccessPoint.User.ServiceAuthentication(context, customUserAuthentication.Prefix);
            }
            else
            {
                QlikView.AccessPoint.User.WebFormAuthentication(context, customUserAuthentication.Prefix);
            }
            return;
        }
        if (context.Settings.Authentication.LoginAddress != "/qlikview/login.htm")
        {
           QlikView.AccessPoint.User.WebFormAuthentication(context);
        }
        else
        {
            QlikView.AccessPoint.User.HttpAuthentication(context);         
        }
    }
&amp;lt;/script&amp;gt;&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Authentication redirect filtering&lt;/H3&gt;
&lt;P&gt;To protect Authenticate.aspx against unsafe redirect abuses, protection mechanism has been implemented which enables QV administrators to specify a trusted host list, to which the clients are allowed to be redirected. This is based on URLs provided in the try and back arguments.&lt;/P&gt;
&lt;P&gt;A redirect abuse issue is a scenario where an attacker utilizes an URL trusted by a victim, but modifies it to redirect the victim to a site controlled by the attacker.&lt;/P&gt;
&lt;P&gt;As an example, the following URL has been modified to redirect the user of it to&amp;nbsp;malicioussite.com.&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&lt;SPAN&gt;&lt;A href="http://trustedcompany.com/QvAJAXZfc/Authenticate.aspx?type=html&amp;amp;webticket=2&amp;amp;try=1&amp;amp;back=&amp;nbsp;http://malicioussite.com/loginpage.htm" target="_blank"&gt;http://trustedcompany.com/QvAJAXZfc/Authenticate.aspx?type=html&amp;amp;webticket=2&amp;amp;try=1&amp;amp;back=&amp;nbsp;http://malicioussite.com/loginpage.htm&lt;/A&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;When accessing the link, which visually looks authentic, a redirect to http://&amp;nbsp;malicioussite.com/loginpage.htm&amp;nbsp;will be made by the QV webserver, because the provided webticket in the URL is invalid. The malicious site now controls the user and can do anything, such as disguising itself as the authentic site to trick the user into typing in valid credentials to the original site.&lt;/P&gt;
&lt;P&gt;By default, there is no filtering on the “try” and “back” parameters when accessing Authenticate.aspx. If filtering is deemed necessary, the file “config.xml” located in “%PROGRAMDATA%\QlikTech\WebServer” needs to be updated.&lt;/P&gt;
&lt;P&gt;The filtering can be enabled in the config.xml file in two ways; normal and strict filtering.&lt;/P&gt;
&lt;P&gt;Normal filtering is enabled using the setting “SafeForwardList” coupled with one or several “TrustedHost” elements. By enabling this, the specified host or domain name IP will be resolved and used when redirecting.&lt;/P&gt;
&lt;P&gt;Restrictions and considerations to take into account when configuring filtering:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;QVWS host is always considered as trusted host.&lt;/LI&gt;
&lt;LI&gt;TrustedHost can be entered as an IP address, domain or hostname.&lt;/LI&gt;
&lt;LI&gt;Host and domain names are case insensitive.&lt;/LI&gt;
&lt;LI&gt;Redirects to loopback address is prohibited unless specified in the Settings.&lt;/LI&gt;
&lt;LI&gt;Only absolute URLs/paths are accepted in the try and back arguments when filtering is enabled.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Strict filtering is a variant of the filtering that takes the specified hosts literally. This mean that while normal filtering will accept any IP that answers to the specified host or domain name, the strict filtering will only redirect to the specified host or domain name. The strict filtering is recommended to be used if the DNS is not trusted or configured to reply with multiple IPs for a specified name.&lt;/P&gt;
&lt;P&gt;Filtering examples:&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;&amp;lt;Authentication&amp;gt;
&amp;lt;SafeForwardList&amp;gt;
&amp;lt;TrustedHost&amp;gt;qlikserver.com&amp;lt;/TrustedHost&amp;gt;
&amp;lt;TrustedHost&amp;gt;qliktechserver.com&amp;lt;/TrustedHost&amp;gt;
&amp;lt;TrustedHost&amp;gt;10.22.33.44&amp;lt;/TrustedHost&amp;gt;
&amp;lt;/SafeForwardList&amp;gt;
&amp;lt;/Authentication&amp;gt;&lt;/LI-CODE&gt;
&lt;P&gt;&lt;SPAN&gt;This setting will make sure to only redirect to hosts&amp;nbsp;&lt;A href="http://qlikserver.com/" target="_blank" rel="noopener" data-cke-saved-href="http://qlikserver.com/"&gt;qlikserver.com&lt;/A&gt;,&amp;nbsp;&lt;A href="http://qliktechserver.com/" target="_blank" rel="noopener" data-cke-saved-href="http://qliktechserver.com/"&gt;qliktechserver.com&lt;/A&gt;&amp;nbsp;and IP “10.22.33.44”. The IP’s that the hostnames resolve to will also be allowed.&lt;/SPAN&gt;&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;&amp;lt;Authentication&amp;gt;
&amp;lt;SafeForwardList&amp;gt;
&amp;lt;TrustedHost&amp;gt; qlikserver.com&amp;lt;/TrustedHost&amp;gt;
&amp;lt;/SafeForwardList&amp;gt;
&amp;lt;/Authentication&amp;gt;&lt;/LI-CODE&gt;
&lt;P&gt;This will allow the hostname&amp;nbsp;&lt;A href="http://qlikserver.com/" target="_blank" rel="noopener" data-cke-saved-href="http://qlikserver.com/"&gt;qlikserver.com&lt;/A&gt;&amp;nbsp;and any IP that it resolves to.&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;&amp;lt;Authentication&amp;gt;
&amp;lt;StrictSafeForwardList&amp;gt;
&amp;lt;TrustedHost&amp;gt;qlikserver.com&amp;lt;/TrustedHost&amp;gt;
&amp;lt;/StrictSafeForwardList&amp;gt;
&amp;lt;/Authentication&amp;gt;&lt;/LI-CODE&gt;
&lt;P&gt;This will only allow redirects to the hostname&amp;nbsp;&lt;A href="http://qlikserver.com/" target="_blank" rel="noopener" data-cke-saved-href="http://qlikserver.com/"&gt;qlikserver.com&lt;/A&gt;, regardless of the IP(s) it resolves to.&lt;/P&gt;</description>
      <pubDate>Tue, 11 May 2021 13:18:09 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Official-Support-Articles/QlikView-and-Authentication/ta-p/1715897</guid>
      <dc:creator>Sonja_Bauernfeind</dc:creator>
      <dc:date>2021-05-11T13:18:09Z</dc:date>
    </item>
  </channel>
</rss>

