Laden...

Windows Benutzernamen auslesen

Erstellt von morcheba vor 19 Jahren Letzter Beitrag vor 19 Jahren 19.548 Views
M
morcheba Themenstarter:in
353 Beiträge seit 2005
vor 19 Jahren
Windows Benutzernamen auslesen

Hallo

Wie kann ich den Namen des aktuell angemeldeten Windows Benutzers mit C# auslesen?

N
4.644 Beiträge seit 2004
vor 19 Jahren
Environment.UserName;
M
morcheba Themenstarter:in
353 Beiträge seit 2005
vor 19 Jahren
und wie eingeben?

und wie muss ich das nun eingeben?

Zum Beispiel:

lblUser.Text = Environment.UserName;

M
morcheba Themenstarter:in
353 Beiträge seit 2005
vor 19 Jahren

Na super. Wenn ich

lblUser.Text = Environment.UserName

eingebe, erscheint bei diesem Label ASPNET

Und ich möchte den WindowsBenutzernamen ausgeben.

49.485 Beiträge seit 2005
vor 19 Jahren

Hallo morcheba,

dann ist ASPNET wohl dein Benutzername, denn laut Doku ist:

Environment.UserName-Eigenschaft
Der Name der beim System angemeldeten Person, die den aktuellen Thread gestartet hat.

herbivore

PS: Es gibt aber auch

SystemInformation.UserName-Eigenschaft
Der Name des gegenwärtig am System angemeldeten Benutzers.

N
4.644 Beiträge seit 2004
vor 19 Jahren

Original von morcheba
Na super. Wenn ich

lblUser.Text = Environment.UserName

eingebe, erscheint bei diesem Label ASPNET

Und ich möchte den WindowsBenutzernamen ausgeben.

Ein Blick in die Doku bewirkt manchmal Wunder, herbivore hat Dir ja nun die Arbeit abgenommen.

M
morcheba Themenstarter:in
353 Beiträge seit 2005
vor 19 Jahren

naja, leider klappts noch immer nicht:

namespace Username

{
/// <summary>
/// Zusammenfassung für WebForm1.
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Label lblUser;

	private void Page_Load(object sender, System.EventArgs e)  
	{  
		 //lblUser.Text = Environment.UserName;  
		lblUser.Text = SystemInformation.UserName-Eigenschaft;  

}  

	  
}  

}

was ist daran falsch?

49.485 Beiträge seit 2005
vor 19 Jahren

Hallo morcheba,

daran ist falsch, dass das eine Web- und keine Windows-Forms-Anwendung ist. Zumindest ist das die Ursache für den von Dir nicht erwarteten Benutzernamen.

herbivore

M
morcheba Themenstarter:in
353 Beiträge seit 2005
vor 19 Jahren

und mit Web Forms ist dies nicht möglich?

49.485 Beiträge seit 2005
vor 19 Jahren

Hallo morcheba,

jetzt müssten mal die ASP.NET Spezialisten ran (dafür gibt es hier eine extra Forum). Aber mal als Einstieg: Wenn man eine Webanwendung benutzt, dann normalerweise nicht dem Windows-Benutzernamen bzw. der Windows-Benutzeranmeldung. Deshalb muss man sich ja auch bei jedem Dienst im Web (Free-Mail-Provider, Forum A, Forum B, ...) immer neu registrieren.

HTH

herbivore

_
416 Beiträge seit 2005
vor 19 Jahren

Hi,

ich kenn mich mit ASP absolut nicht aus, aber ich würd mal irgendwie sowas in der Art probieren:

HttpContext.Current.User.Identity.Name

C
1.215 Beiträge seit 2004
vor 19 Jahren

HttpContext.Current.User.Identity.Name nein, der liefert, wenn er überhaupt gesetzt ist, maximal den LogonName, wenn die windows-authentifizierung in dem webverzeichnis aktiviert ist.

das wirst du per ASP.NET kaum lösen können (auf servern ist ja auch i.d.r. gar kein user am desktop angemeldet).
auch eine desktop-anwendung, die unter einem anderen benutzerkontext läuft, kann per .NET nicht an den eingeloggeden desktop-user ermitteln.

es gibt aber einen API-aufruf, der das kann: NetWkstaUserEnum
du findest sie in der netapi32.dll

grtz
chief

M
20 Beiträge seit 2005
vor 19 Jahren

Original von morcheba
lblUser.Text = SystemInformation.UserName-Eigenschaft;

Kann es evtl sein, dass dort ein grundsätzlicher Fehler ist, der schon nen Compiler Fehler verursacht? 😉

Richtig wäre es so:
lblUser.Text = SystemInformation.UserName;

Ob das allerdings das gewünschte Ergebnis bringt bezweifle ich stark.

Greetz
MoD

Ps: Darf man fragen, wofür Du den Benutzernamen bei einer Webanwendung überhaupt benötigst?

Life is a piece of shit, when you look at it!

M
morcheba Themenstarter:in
353 Beiträge seit 2005
vor 19 Jahren

ich habe nun schon verschiedene Sachen ausprobiert, aber nichts funktioniert!

Ich habe ein c# Projekt gestartet mit einer APS Webanwendung. (Ich habe erst gerade damit begonnen, kenne mich also kaum aus).

Und nun möchte ich im WebForm.aspx den Usernamen des gerade angemoldenen Benutzernamen (diesen aus der Registry: HKEY_CURRENT_USER/Software/Windows/CurrenVersion/Explorer und dann Logon User Name) in einem Layer ausgeben, damit ich später mit diesem Benutzernamen weiter arbeiten kann.

Wisst ihr nun eine mögliche Lösung?

M
morcheba Themenstarter:in
353 Beiträge seit 2005
vor 19 Jahren

Schlussendlich ist es für das Intranet. Wir melden uns am Netzwerk mit einem Benutzernamen an. Wenn der User die Seite aufruft, wird geprüft, ob er in der Datenbank vorhanden ist. Dafür benötige ich den Benutzernamen von Windows. Ist der User vorhanden, erscheint ein Loginformular, wo er nur noch das Passwort eingeben muss. Es geht eigentlich darum, dass man nicht immer Passwort und Benutzernamen eingeben muss. Mein Chef möchte das so....

M
20 Beiträge seit 2005
vor 19 Jahren

Hi morcheba

Hab ich das jetzt richtig verstanden, dass Du den Benutzernamen des Benutzers willst, der auf dem Client angemeldet ist?

Dann bin ich mir ziemlich sicher, dass das nicht möglich ist.

Ich würde einen Weg über Cookies wählen.
D.h.: Beim ersten aufrufen der Seite wird dem Benutzer das komplette Login Formulat gezeigt. Er gibt Benutzername und Passwort an. Ist das erfolgreich verlaufen kannst Du den Benutzernamen in ein Cookie schreiben. Ruft er die Seite nochmal auf liesst Du das Cookie aus und setzt im Login Formular den Benutzernamen.

Greetz
MoD

Life is a piece of shit, when you look at it!

M
morcheba Themenstarter:in
353 Beiträge seit 2005
vor 19 Jahren

und wie würde das ungefähr funktionieren?

49.485 Beiträge seit 2005
vor 19 Jahren

Hallo morcheba,

wenn der Webserver NTLM Auhtorisierung unterstützt (auch wenn es evtl. nuch aktiviert werden muss) und es keine Hochsicherheitsanwendung ist, dann kann man sich auch das Passwort sparen und die Windows-Benutzeranmeldung an den Webserver durchreichen. Wie gesagt, da steht die Bequemlichkeit deutlich über der Sicherheit.

In der.NET-SDK-Doku gibt es einen Abschnitt 'NTLM- und Kerberos-Authentifizierung'. Vielleicht hilft der dir weiter.

herbivore

C
1.215 Beiträge seit 2004
vor 19 Jahren

wenn die authentifizierung des webs auf "Windows" (entspricht der "integrierten Windows-Authentifizierung" im IIS bzw. der von herbivore genannten "NTML" auth) eingestellt ist (egal ob in der *.config oder im IIS selber), so führt das dazu, dass sich der besucher des webs über den windows-login-prompt einloggen muss.
dadurch wird die variable "HttpContext.Current.User.Identity.Name" gesetzt (dies entspricht der server-variablen "LOGON_USER").
das web läuft dann aber dennoch weiter unter dem ASPNET-konto.

den client benutzernamen kannst du nicht auslesen, es sei denn, er hat sich auf oben genannte art und weise authentifiziert.

ändere den knoten "authentication" in deiner web.config, in dem du dort mode="Windows" einstellst - dann brauchst du nur den LogonUser auszulesen (also "HttpContext.Current.User.Identity.Name" bzw. "this.User.Identity.Name" aus der *.aspx-datei heraus).
wenn du dich eingangs ein bisschen deutlicher ausgedrückt hättest...
😉

cookies etc. brauchst du nicht zu verwenden, weil der LogonUser selbst im http-header steht.

grtz
chief

M
morcheba Themenstarter:in
353 Beiträge seit 2005
vor 19 Jahren

Nach Eingabe von:

lblUser.Text = HttpContext.Current.User.Identity.Name ;

erscheint gar nichts mehr...

C
1.215 Beiträge seit 2004
vor 19 Jahren

Original von morcheba
Nach Eingabe von:

lblUser.Text = HttpContext.Current.User.Identity.Name ;

erscheint gar nichts mehr...

dann lies meinen gesamten letzten beitrag (noch mal).

grtz
chief

E
171 Beiträge seit 2004
vor 19 Jahren

Original von morcheba
und mit Web Forms ist dies nicht möglich?

doch damit kannste das auch machen!
schau dir mal im SDK den namespace
"System.Security.Principal namespace" an

Gruß
Elron

C
1.215 Beiträge seit 2004
vor 19 Jahren

doch damit kannste das auch machen!
schau dir mal im SDK den namespace
"System.Security.Principal namespace" an

und das ist genau das, wo von gerade die rede ist...
😉

grtz
chief

M
morcheba Themenstarter:in
353 Beiträge seit 2005
vor 19 Jahren

Wenn ich in der SDK suche finde ich etwas, wo es heisst, der Windows Anmeldenamen werde ausgegeben. Doch leider kann ich mit meinen wenigen Kenntnissen diesen Code nicht anwenden...

Kann mir jemand helfen? In der SDK ist es unter WindowsIdentity-Member drin und dann Name.
Nun soll folgender Code eingegeben werden:

public virtual string Name {get;}

Weiss jemand weiter?

C
1.215 Beiträge seit 2004
vor 19 Jahren

Warum (?!) probierst du nicht erst einmal das aus, was ich dir geantwortet habe?
😉

du brauchst nur in deiner web.config einen kleinen eintrag zun ändern...


...
<authentication mode="Windows" />
...

jetzt ist der user gezwungen, sich beim betreten der site mit seinem windows-usernamen/passwort zu authentifizieren.
den namen kannst du dann per "this.User.Identity.Name" abfragen.

grtz
chief

M
morcheba Themenstarter:in
353 Beiträge seit 2005
vor 19 Jahren

Das in der web.config habe ich geändert.

Ich habe das WebFrom1.aspx und dort habe ich zu Testzwecken einen Layer gemacht. Dieser Layer hat die ID lblText

Wie kann ich nun mit "this.User.Identity.Name" den Benutzernamen abfragen?

C
1.215 Beiträge seit 2004
vor 19 Jahren

wie wärs mit lblText.Text = this.User.Identity.Name?
😉

grtz
chief

M
morcheba Themenstarter:in
353 Beiträge seit 2005
vor 19 Jahren

das habe ich ja versucht..aber es funktioniert nicht. Ich habe es auch versucht, indem dass ich einen Button erstelle, und nach Klick auf dem Button soll im Layer der Benutzername ausgegeben werden...

private void Button1_Click(object sender, System.EventArgs e)
{
lblText.Text = this.User.Identity.Name;
}

C
1.215 Beiträge seit 2004
vor 19 Jahren

versuche noch mal folgendes in der web.config zu ändern...


...
<authorization>
    <deny users="?" />
</authorization>
...

grtz
chief

M
morcheba Themenstarter:in
353 Beiträge seit 2005
vor 19 Jahren

du bist ja genail =)

danke vielmals, es funktioniert nun!

M
morcheba Themenstarter:in
353 Beiträge seit 2005
vor 19 Jahren

nun gibts noch ein kleines problem...

Es gibt mir auch noch die Domäne raus... Kann man diese auch ausblenden? Es kommt eben so raus:

Domäne\Username

C
1.215 Beiträge seit 2004
vor 19 Jahren

das machste so...

lblText.Text = this.User.Identity.Name.Substring(this.User.Identity.Name.IndexOf('\')+1);

grtz
chief

M
morcheba Themenstarter:in
353 Beiträge seit 2005
vor 19 Jahren

das ist ja super toll! danke vielmals!!

Könntest du mir noch kurz den Code erklären?

49.485 Beiträge seit 2005
vor 19 Jahren

Hallo morcheba,

schau doch mal unter String.Substring und String.IndexOf in die Doku. Ich denke, dann wirst du leicht verstehen, was da passiert.

herbivore