zjištění lokálního NT uživatele a lokálního jména PC v aplikaci běžící na IIS serveru   zodpovězená otázka

ASP.NET/IIS

DObrý den,

mám aplikaci, která by dokázala fungovat mnohem lépe, kdyby znala NT jméno uživatele a počítač, ze kterého ten uživatel ASP.NET aplikaci spouští.Vím, že se tomuto tématu věnovaly některé jiné články, prošel jsem jich opravdu hodně, ale bohužel mi doporučované postupy neustále vrací buďto jméno serveru nebo jméno úplně jiného počítače, který má tu aplikaci taky zrovna spuštěnou. Uživatele (svůj login) nejsem v code behind (VB) schopen dostat vůbec. Při testování na localhostu se mi daří, po publikování na server to nefunguje.

požívám windows autentication

ve web.config mám

    <identity impersonate="true"/>
    <authentication mode="Windows"/>

pro zjištění jména uživatele jsem zkoušel krom jiného

        LoggedUser = System.Environment.UserName
        LoggedUser = Request.LogonUserIdentity.Name

což na localhostu vrací mého uživatele vč. domény, ale po publikaci na server vrací NT AUTHORITY\IUSR nebo něco podobného.

Jméno počítače získávám pomocí

    Private Sub GetPCName()
        LocalPC = Dns.GetHostEntry(Request.ServerVariables("remote_addr")).HostName 'PC včetně cesty v síti
        LocalPC = LocalPC.Substring(0, LocalPC.IndexOf(".")) 'pouze jméno PC 
    End Sub

na localhostu funguje, po publikaci na server vrací někdy jméno mého, někdy jméno jiného počítače (kolegy) ?!

K tématu jsem za posledních 14 dní nenašel fungující odpovědi, pouze odkazy. Předem děkuji za odpovědi nebo upozornění, co bych mohl mít kde špatně.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
System.Web.HttpContext.Current.User.Identity.Name

nebo

Page.User.Identity.Name

doporučuji prostudovat - http://weblogs.asp.net/scottgu/archive/2...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

NT AUTHORITY\IUSR je výchozí účet pro anonymní přihlášení (anonymous authentication). Pokud při impersonate="true" chcete zjistit skutečného Windows uživatele, tak musíte na IIS anonymous authentication vypnout.

Jiná možnost je impersonate a Windows authentication nepoužívat a Windows uživatele zjistit pomoci:

HttpContext.Current.Request.LogonUserIdentity.Name;

Dále vám doporučuji si pročíst na toto téma tyto články:

http://www.dotnetportal.cz/blogy/15/Null...

http://www.dotnetportal.cz/blogy/15/Null...

http://www.dotnetportal.cz/blogy/15/Null...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Díky za odpovědi a váš čas, pes bude zřejmě zakopán na jiném místě.

HttpContext.Current.Request.LogonUserIdentity.Name

vrací NT AUTHORITY\IUSR, ve web.config jsem zkoušel různé kombinace. Bohužel je IIS na serveru, který neslouží jen pro mou aplikaci a ani k tomu nemám přístup. Kdybych změnil (nechal změnit) konfiguraci IIS, mohl bych někomu jinému rozhodit jeho aplikaci. Takže to potřebuji nějak obejít.

System.Web.HttpContext.Current.User.Identity.Name
Page.User.Identity.Name

vrací prázdné řetězce.

Linky jsem prošel, některé vidím podruhé. Těch informací je tolik, že v nich přestávám mít pořádek.

Není třeba nějaké méně elegantní řešení, že bych si zjistil uživatele a jméno PC ne na serveru, ale lokálně po zobrazení stránky, pak to na ten server poslal skrytě tak, aby tím budoucí uživatel nebyl otravován?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Samozřejmě to lze, například za pomoci JS..ale osobně bych touto cestou rozhodně nešel. Windows autentifikace a autorizace se standardní a fungující součást .Net řešení. Nedávno jsem zrovna jednu intranet webapp programoval a nebyl s tím sebemenší problém.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jestli tomu dobře rozumím, musím nechat vypnout na IIS anonymous authentication a pak výše uvedené skripty budou fungovat. To by mohlo být ono. jestli se mýlím, opravte mě prosím.

Zbývá druhá část - jméno počítače. Ta souvisí také s IIS anonymous authentication nebo je to jiný problém?

Výše uvedený kód (viz původní dotaz) mi vracel název mého počítače, po několika dnech název jiného počítače, to mě opravdu rozveselilo.. Dává to tušit, že v té proměnné, ze které to tahám, je asi celá řada právě připojených PC a mě to vrátí třeba hned ten první v seznamu. Jak ale poznám, který ze seznamu je právě ten můj PC? Nebo je název mého PC jinde?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ano na IIS musíte nechat vypnout anonymous authentication pro zjištění uživatele (přes Page.User.Identity.Name).

Nastavení je na úrovni web aplikace, takže tím jiné aplikace na IIS neovlivníte.

Jméno počítače získáváte skoro dobře, já na to mám tuto vlastnost:

/// <summary>
        /// Jméno počítače clienta (pokud lze zjistit, jinak firewallu)
        /// </summary>
        public static string ClientMachineName
        {
            get
            {
                string hostName = null;
                try
                {
                    //UserHostAddress returns client IP address if it's available and if it's not the name of firewall or NAT box.
                    hostName = System.Net.Dns.GetHostEntry(HttpContext.Current.Request.UserHostAddress).HostName;
                }
                catch (System.Net.Sockets.SocketException)
                {
                    //Ignore exception
                }

                string machineName = null;
                if (!string.IsNullOrEmpty(hostName))
                {
                    machineName = hostName.Split(new char[] { '.' })[0];
                }
                return machineName;
            }
        }

Kde jméno se získává na základě IP Adresy UserHostAddress, kterou klient posílá.

Musíte prostě počítat s tím, že někdy se ke správnému jménu počítače klienta na Webovém serveru nedostanete, například pokud je za nějakým Firewallem nebo NATem, tak dostanete pouze jméno toho firewalu, někdy také nemusí jít získat vůbec.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Nádhera, díky tomu nastavení IIS na úrovni mé aplikace nebylo tak složité nastavení změnit a FUNGUJE TO.

Vyřešil jste můj problém, děkuji Vám.

miluju počítače...

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback