<?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>topic Re: .NET SDK authentication from Non-Domain Computer in Integration, Extension &amp; APIs</title>
    <link>https://community.qlik.com/t5/Integration-Extension-APIs/NET-SDK-authentication-from-Non-Domain-Computer/m-p/1040881#M4290</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi, &lt;/P&gt;&lt;P&gt;You could use impersonation se example below.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best regards&lt;/P&gt;&lt;P&gt;Lars-Göran Book&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Example:&lt;/P&gt;&lt;P&gt; class Program&lt;BR /&gt; {&lt;BR /&gt;&amp;nbsp; static void Main(string[] args)&lt;BR /&gt;&amp;nbsp; {&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; //&lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="http://stackoverflow.com/questions/9021414/dynamic-impersonation-in-asp-net" rel="nofollow"&gt;http://stackoverflow.com/questions/9021414/dynamic-impersonation-in-asp-net&lt;/A&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; if (Impersonation.impersonateValidUser("lars", "mydomain", "myPwd"))&lt;BR /&gt;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var location = Location.FromUri(new Uri("wss://myserver.domain.com"));&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; location.AsNtlmUserViaProxy();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; using (var hub = location.Hub(noVersionCheck: true))&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(hub.GetAuthenticatedUser());&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(location.IsAlive(noVersionCheck:true));&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp; else&lt;BR /&gt;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine("not a valid user");&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Console.Read();&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt; public class Impersonation&lt;BR /&gt; {&lt;BR /&gt;&amp;nbsp; public static int LOGON32_LOGON_INTERACTIVE = 2;&lt;BR /&gt;&amp;nbsp; public static int LOGON32_PROVIDER_DEFAULT = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp; [DllImport("advapi32.dll")]&lt;BR /&gt;&amp;nbsp; public static extern int LogonUserA(string lpxzUsername, string lpzDomain, string lpzPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);&lt;BR /&gt;&amp;nbsp; [DllImport("advapi32.dll")]&lt;BR /&gt;&amp;nbsp; public static extern int DuplicateToken(IntPtr ExistingTokenHandle, int ImpersonationLevel, ref IntPtr DuplicateTokenHandle);&lt;BR /&gt;&amp;nbsp; [DllImport("advapi32.dll")]&lt;BR /&gt;&amp;nbsp; public static extern long RevertToSelf();&lt;/P&gt;&lt;P&gt;&amp;nbsp; [DllImport("Kernel32.dll")]&lt;BR /&gt;&amp;nbsp; public static extern long CloseHandle(IntPtr handle);&lt;/P&gt;&lt;P&gt;&amp;nbsp; public static WindowsImpersonationContext impersonationContext;&lt;/P&gt;&lt;P&gt;&amp;nbsp; public static bool impersonateValidUser(string userName, string domain, string password)&lt;BR /&gt;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; WindowsIdentity tempWindowsIdentity;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; IntPtr token = IntPtr.Zero;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; IntPtr tokenDuplicate = IntPtr.Zero;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; bool ValidUser = false;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; if (RevertToSelf() != 0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (LogonUserA(userName, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref token) != 0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (DuplicateToken(token, 2, ref tokenDuplicate) != 0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tempWindowsIdentity = new WindowsIdentity(tokenDuplicate);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; impersonationContext = tempWindowsIdentity.Impersonate();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (impersonationContext != null)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ValidUser = true;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; if (!tokenDuplicate.Equals(IntPtr.Zero))&lt;BR /&gt;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CloseHandle(tokenDuplicate);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp; if (!token.Equals(IntPtr.Zero))&lt;BR /&gt;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CloseHandle(token);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp; return ValidUser;&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; public static void undoImpersonation()&lt;BR /&gt;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; try&lt;BR /&gt;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; impersonationContext.Undo();&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp; catch&lt;BR /&gt;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt; }&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 22 Jan 2016 10:42:12 GMT</pubDate>
    <dc:creator />
    <dc:date>2016-01-22T10:42:12Z</dc:date>
    <item>
      <title>.NET SDK authentication from Non-Domain Computer</title>
      <link>https://community.qlik.com/t5/Integration-Extension-APIs/NET-SDK-authentication-from-Non-Domain-Computer/m-p/1040880#M4289</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt; I am trying to determine the best method for authenticating the .NET SDK to a Qlik Sense server from a computer that is not on the same domain as the Qlik Sense server.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;From my understanding the AsNtlmUserViaProxy() method of ILocation does not allow me to change who my user is, it uses the currently logged in user information.&amp;nbsp; Is their a way to change the userId/password for this call, prior to it being issued?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have looked at the AsStaticHeaderUserViaProxy(), however I don't understand how I can secure this method of access from external hackers.&amp;nbsp; Should someone guess my chosen header name they would then have complete access to my Qlik Sense server.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I know the external API's are configured so that they can use certificates for authentication, is their an .NET SDK method to allow for authenitcation based on certificates?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;What is the best method to securely authenticate the .NET SDK against a Qlik Sense server, without having it tied to the current user credentials of the computer I am using the SDK from a?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Lucas&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 20 Jan 2016 22:05:04 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Integration-Extension-APIs/NET-SDK-authentication-from-Non-Domain-Computer/m-p/1040880#M4289</guid>
      <dc:creator>lblancher</dc:creator>
      <dc:date>2016-01-20T22:05:04Z</dc:date>
    </item>
    <item>
      <title>Re: .NET SDK authentication from Non-Domain Computer</title>
      <link>https://community.qlik.com/t5/Integration-Extension-APIs/NET-SDK-authentication-from-Non-Domain-Computer/m-p/1040881#M4290</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi, &lt;/P&gt;&lt;P&gt;You could use impersonation se example below.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best regards&lt;/P&gt;&lt;P&gt;Lars-Göran Book&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Example:&lt;/P&gt;&lt;P&gt; class Program&lt;BR /&gt; {&lt;BR /&gt;&amp;nbsp; static void Main(string[] args)&lt;BR /&gt;&amp;nbsp; {&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; //&lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="http://stackoverflow.com/questions/9021414/dynamic-impersonation-in-asp-net" rel="nofollow"&gt;http://stackoverflow.com/questions/9021414/dynamic-impersonation-in-asp-net&lt;/A&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; if (Impersonation.impersonateValidUser("lars", "mydomain", "myPwd"))&lt;BR /&gt;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var location = Location.FromUri(new Uri("wss://myserver.domain.com"));&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; location.AsNtlmUserViaProxy();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; using (var hub = location.Hub(noVersionCheck: true))&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(hub.GetAuthenticatedUser());&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(location.IsAlive(noVersionCheck:true));&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp; else&lt;BR /&gt;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine("not a valid user");&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Console.Read();&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt; public class Impersonation&lt;BR /&gt; {&lt;BR /&gt;&amp;nbsp; public static int LOGON32_LOGON_INTERACTIVE = 2;&lt;BR /&gt;&amp;nbsp; public static int LOGON32_PROVIDER_DEFAULT = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp; [DllImport("advapi32.dll")]&lt;BR /&gt;&amp;nbsp; public static extern int LogonUserA(string lpxzUsername, string lpzDomain, string lpzPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);&lt;BR /&gt;&amp;nbsp; [DllImport("advapi32.dll")]&lt;BR /&gt;&amp;nbsp; public static extern int DuplicateToken(IntPtr ExistingTokenHandle, int ImpersonationLevel, ref IntPtr DuplicateTokenHandle);&lt;BR /&gt;&amp;nbsp; [DllImport("advapi32.dll")]&lt;BR /&gt;&amp;nbsp; public static extern long RevertToSelf();&lt;/P&gt;&lt;P&gt;&amp;nbsp; [DllImport("Kernel32.dll")]&lt;BR /&gt;&amp;nbsp; public static extern long CloseHandle(IntPtr handle);&lt;/P&gt;&lt;P&gt;&amp;nbsp; public static WindowsImpersonationContext impersonationContext;&lt;/P&gt;&lt;P&gt;&amp;nbsp; public static bool impersonateValidUser(string userName, string domain, string password)&lt;BR /&gt;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; WindowsIdentity tempWindowsIdentity;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; IntPtr token = IntPtr.Zero;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; IntPtr tokenDuplicate = IntPtr.Zero;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; bool ValidUser = false;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; if (RevertToSelf() != 0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (LogonUserA(userName, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref token) != 0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (DuplicateToken(token, 2, ref tokenDuplicate) != 0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tempWindowsIdentity = new WindowsIdentity(tokenDuplicate);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; impersonationContext = tempWindowsIdentity.Impersonate();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (impersonationContext != null)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ValidUser = true;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; if (!tokenDuplicate.Equals(IntPtr.Zero))&lt;BR /&gt;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CloseHandle(tokenDuplicate);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp; if (!token.Equals(IntPtr.Zero))&lt;BR /&gt;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CloseHandle(token);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp; return ValidUser;&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; public static void undoImpersonation()&lt;BR /&gt;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; try&lt;BR /&gt;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; impersonationContext.Undo();&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp; catch&lt;BR /&gt;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt; }&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 22 Jan 2016 10:42:12 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Integration-Extension-APIs/NET-SDK-authentication-from-Non-Domain-Computer/m-p/1040881#M4290</guid>
      <dc:creator />
      <dc:date>2016-01-22T10:42:12Z</dc:date>
    </item>
    <item>
      <title>Re: .NET SDK authentication from Non-Domain Computer</title>
      <link>https://community.qlik.com/t5/Integration-Extension-APIs/NET-SDK-authentication-from-Non-Domain-Computer/m-p/1040882#M4291</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;you can use also this nuget package PM&lt;SPAN class="pl-k"&gt;&amp;gt;&lt;/SPAN&gt; &lt;SPAN class="pl-c1"&gt;Install-Package&lt;/SPAN&gt; SimpleImpersonation&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;What you have to take care is that everything behind Impersonation.impersonateValidUser(... is running as a other user, so if you other things like Console.WriteLine it can run into problems. So don't forget to make a undoImpersonation after you have a valid connection to the hub. I don't know if it is easy working just to take the valid hub variable in the not impersonated context. I will test this in the next two weeks and come back with an info.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;bye&lt;/P&gt;&lt;P&gt;Konrad&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 25 Jan 2016 06:44:10 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Integration-Extension-APIs/NET-SDK-authentication-from-Non-Domain-Computer/m-p/1040882#M4291</guid>
      <dc:creator>konrad_mattheis</dc:creator>
      <dc:date>2016-01-25T06:44:10Z</dc:date>
    </item>
  </channel>
</rss>

