Toon posts:

[ASP.NET 2] Ingelogde windowsnaam op client verkrijgen?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Goedemorgen forum,

voor mijn stage ben ik bezig een webbassed applicatie te maken. Hierbij worden een aantal dingen weggeschreven in een database,
Nu wil ik bij houden wie de laatste wijzigingen gedaan heeft op de database.
Elk record in de database heeft een veld genaamd: wijziging. Als er een record gewijzigd wordt (of aangemaakt) wordt dit veld gevuld met de huidige datum+tijd en de ingelogde windows naam,
Nu werkt dit niet helemaal goed. Ik krijg namelijk niet de juiste ingelogde windows naam op de client, maar de ingelogde windows naam op de server.
De source files (aspx) staan allemaal op een fileserver hier binnen het bedrijf. (NTFS beveiligd) IIS draait weer op een andere server. Hier heeft het bedrijf voor gekozen.
Bij IIS op de server heb ik een virtuele directory aangemaakt naar de map (waarin mijn aspx bestanden staan) op de fileserver. Dit werkt alles prima.
Alleen wanneer ik een virtuele directory aanmaak moet ik (omdat de fileserver NTFS is) een gebruikersnaam en wachtwoord ingeven. Wanneer ik in een aspx file User.Identity.Name of System.Security.Principal.WindowsIdentity.GetCurrent().Name doe, krijg ik dus alleen de user name terug die er gebruikt wordt om contact te maken met de file server.
Nu heb ik in IIS al anonymous access uitgezet en integrated windows autentication aangezet. Ook heb ik in mijn web.config gebruik gemaakt van impersonatie.
Nu denk ik echter dat het daarmee mis gaat.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
web.config

<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
    <system.web>
        <compilation debug="true">
            <assemblies>
                <add assembly="System.Management, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
                <add assembly="System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
            </assemblies>
        </compilation>
    <identity impersonate="true" />
    <!-- Impersonatie -->

        <customErrors mode="Off"/>
        <!-- Geef gedetailleerde foutmelding op remote computer -->
    </system.web>
</configuration>


Kan iemand mij wellicht vertellen hoe ik de juiste ingelogde windowsnaam van de client naar voren krijg?

Bedankt!

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:21
Je zal in je web.config iig moeten opnemen dat je gebruik maakt van Windows Authentication.
code:
1
<authentication mode="Windows"/>

https://fgheysels.github.io/


Verwijderd

Topicstarter
Helaas, dit werkt niet. Toch bedankt.
Heb de regel toegevoegd aan mijn web.config, maar ik blijf dezelfde user name terug krijgen,
Op welke machine hier binnen het netwerk ik het ook probeer. (ja, elk ingelogd met een andere Username op het domein O-) )

Op google kom ik eigenlijk ook niet echt verder.

Iemand misschien nog een idee?

Verwijderd

Topicstarter
Met Request.UserHostName krijg ik wel netjes het IP-adres van de client naar voren.
Aangezien dat werkt, zou toch User.Identity.Name ook moeten werken. Of werken deze scripts apart?

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Ik heb op het net het volgende artikel gevonden. Hierbij worden drie verschillende users onderscheiden die tegelijk actief kunnen zijn binnen 1 pagina. Kun je eens kijken of die alledrie ook hetzelfde resultaat geven bij jou?

http://www.eggheadcafe.com/articles/20050703.asp

Verwijderd

Topicstarter
bigbeng schreef op woensdag 31 mei 2006 @ 10:54:
Ik heb op het net het volgende artikel gevonden. Hierbij worden drie verschillende users onderscheiden die tegelijk actief kunnen zijn binnen 1 pagina. Kun je eens kijken of die alledrie ook hetzelfde resultaat geven bij jou?

http://www.eggheadcafe.com/articles/20050703.asp
Je gelooft het niet. Alle drie de manieren geven weer mijn gebruikersnaam weer. Bij iedereen.
Snap er niets van. |:(
Page.User.Identity.Name, System.Security.Principal.WindowsIdentity.GetCurrent().Name & System.Threading.Thread.CurrentPrincipal.Identity.Name

Je zou toch denken dat er toch iets mis gaat met de impersonatie. Aangezien WindowsIdentity.GetCurrent de verkeerde username terug geeft.

  • Vedett.
  • Registratie: November 2005
  • Laatst online: 17:46
Je moet je IIS ook goed zetten!

Rechts klikken op de website -> properties
Tabblad Directory Security -> 'Anonymous acces and authentication control' -> Edit
ALLES UIT vinken behalve Integrated Windows Authentication


Reden:
Je request gaat eerst naar IIS. Standaard wordt er geen extra info (credentials) mee doorgegeven. Dus IIS denkt dat alles in orde is en laat ASP.Net het verder verwerken. IIS heeft dus niets met de userName gedaan zodat ASP.Net nog altijd onder dezelfde gebruiker draait.

Je moet IIS dus wijs maken dat hij de user moet veranderen voordat het de controle aan ASP.Net overlaat. Dat doe je door voor Authenticated Acces te kiezen in IIS.
Let wel op met je Impersonate. Je volledige site draait dan onder de username EN rechten van de gebruiker.

edit:

Welke 3 manieren werken niet?
- Config file aanpassen op 3 manieren
- Authenticatie van IIS aanpassen op 3 manieren

[ Voor 11% gewijzigd door Vedett. op 31-05-2006 12:45 . Reden: na vluchtig lezen van artikel ]


Verwijderd

Topicstarter
Vedett. schreef op woensdag 31 mei 2006 @ 12:43:
Je moet je IIS ook goed zetten!

Rechts klikken op de website -> properties
Tabblad Directory Security -> 'Anonymous acces and authentication control' -> Edit
Alles UIT vinken behalve Integrated Windows Authentication


Reden:
Je request gaat eerst naar IIS. Standaard wordt er geen extra info (credentials) mee doorgegeven. Dus IIS denkt dat alles in orde is en laat ASP.Net het verder verwerken. IIS heeft dus niets met de userName gedaan zodat ASP.Net nog altijd onder dezelfde gebruiker draait.

Je moet IIS dus wijs maken dat hij de user moet veranderen voordat het de controle aan ASP.Net overlaat. Dat doe je door voor Authenticated Acces te kiezen in IIS.
Let wel op met je Impersonate. Je volledige site draait dan onder de username EN rechten van de gebruiker.
Mijn IIS staat exact zo ingesteld. En ik wil ook dat de site draait met de rechten van de ingelogde gebruiker. Zo hebben alleen de juiste mensen rechten op de site.
Het is namelijk zo dat hij (welke combinaties ik ook gebruik) steeds de gebruikersnaam terug geeft waarmee ik verbinding maak naar de fileserver. Maar daar wil ik dus eigenlijk de gebruikersnaam van de gebruiker van de site voor gebruiken.
Denk dat het daar mee mis gaat. Alleen hoe doe ik dat? :D

edit:

Met die drie manieren bedoel ik de drie manieren om een user name te laten weergeven in asp.net.

[ Voor 6% gewijzigd door Verwijderd op 31-05-2006 12:48 ]


  • Vedett.
  • Registratie: November 2005
  • Laatst online: 17:46
OK je hebt dus:

- Een config file zoals je eerst aangaf?
- De entry vanWhoami toegevoed?
- IIS ingesteld op Integrated Windows Authentication en de rest UITgevinkt?

Je probeert hier de userName te verkrijgen door (3 manieren)
Page.User.Identity.Name;
System.Security.Principal.WindowsIdentity.GetCurrent().Name;
System.Threading.Thread.CurrentPrincipal.Identity.Name;

Je hebt op 3 pc's geprobeerd en je krijgt dus 9 keer dezelfde naam?

Dat zou eigenlijk toch moeten lukken.
Het enige probleem waar ik ook ooit tegen aangelopen ben is dat al de servers die je probeert te accessen via een geïmpesoneerde account gebruik moeten maken van Kerberos oid (weet niet zeker meer) Alles alles XP/Server 2003 is zou dit geen probleem mogen zijn. Anders zal het niet gaaan volgens mij.

Verwijderd

Topicstarter
Mijn web.config heb ik iets aangepast:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
   <system.web>

      <compilation debug="true" defaultLanguage="c#">
         <assemblies>
            <add assembly="System.Management, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
            <add assembly="System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
         </assemblies>
      </compilation>

      <identity impersonate="true" />
      <!-- Gebruik Windows Login voor ASP_NET service -->
    
      <authentication mode="Windows"/>

      <customErrors mode="Off"/>
      <!-- Geef gedetailleerde foutmelding op remote computer -->

   </system.web>
</configuration>

Ik heb IIS ingesteld zoals aangegeven.
Alleen integraded windows authentication aangevinkt. (rest UIT :) )
Met de huidige web.config file, krijg ik dus 3x de username terug die gebruikt wordt op toegang te krijgen tot de fileserver. (Mijn username, vandaar dat ik dacht dat het altijd goed ging 8)7 )
Wanneer ik authenticatie mode op None zet, krijg ik alleen op System.Security.Principal.WindowsIdentity.GetCurrent().Name wat terug. En dat is ook weer mijn username. :D

Wat een probleem uitdaging B)

edit:

Beide servers (server met IIS & fileserver) draaien op windows 2000 server

[ Voor 13% gewijzigd door Verwijderd op 31-05-2006 13:42 ]


Verwijderd

Topicstarter
Nou ik ben in ieder geval achter het probleem.
Ik heb een andere username gebruikt voor het verbinding maken met de fileserver.
Nu krijg ik elke keer die username terug.
Nu maar hopen dat er een manier is waarop er verbinding gemaakt kan worden met een map op de fileserver dmv de windows autentication van IIS.

Let's Google! :D (nou ik dan :Y) )

Verwijderd

Verwijderd schreef op woensdag 31 mei 2006 @ 14:28:
Nou ik ben in ieder geval achter het probleem.
Ik heb een andere username gebruikt voor het verbinding maken met de fileserver.
Nu krijg ik elke keer die username terug.
Nu maar hopen dat er een manier is waarop er verbinding gemaakt kan worden met een map op de fileserver dmv de windows autentication van IIS.

Let's Google! :D (nou ik dan :Y) )
Moet je niet gewoon in de settings van IIS bij tablad Home Directory kiezen voor share, connect as en dan geen naam invullen maar: Always use the authenticated user's credentials... aanvinken?

Dat lijkt mij de manier. Uitreraard moeten de users wel rechten hebben op de fileserver
Pagina: 1