Laden...

Impersonate - Windows Authentifizierung

Erstellt von plongo vor 18 Jahren Letzter Beitrag vor 18 Jahren 3.561 Views
P
plongo Themenstarter:in
123 Beiträge seit 2006
vor 18 Jahren
Impersonate - Windows Authentifizierung

Erstmal hallo an alle,

für unsere Intranet-Anwendung um einen Newsletter zu erstellen und
versenden, möchte ich gerne mit der Windows-Auth. nutzen. Dennoch klappt dies
leider nicht wie gewünscht.

Ich habe zu einem im IIS 6.0 die Windows-Auth. eingeschaltet und die Anonyme
Auth. ausgeschaltet.

In der Web.config habe ich dann noch folgende Einträge hinterlegt.

<!-- Authenifizierungsmethode festlegen /-->
<authentication mode="Windows" />
<identity impersonate="true" />

<!-- Zugriff fuer alle Seiten nicht erlauben (erstmal) /-->
<authorization>
<allow roles="Domain\Rolle1,Domain\Rolle2" />
</authorization>

Nun wenn ich folgende Code ausführe, bekomme ich nicht die gewünschten
Ergebnisse:

<script language="vb" runat="server">
Sub Page_Load()
lbmessage.Text = File.Exists("J:\Ordner1\Ordner2\datei.doc") & "<br />"
lbmessage.Text &= File.Exists("\server\Ordner1\Ordner2\datei.doc") & "<br
/>"
lbmessage.Text &= User.Identity.Name & "<br />"
lbmessage.Text &= WindowsIdentity.GetCurrent().Name & "<br />"
End Sub

Ich habe folgende Ausgabe:

False
False
Domain\Account
Domain\Account

Wenn ich nun in der web.Config Datei den Eintrag
<identity impersonate="true" /> auf
<identity impersonate="true" userName="User" password="pwd" /> auf meine
Account einrichte, lieftert mir der Befehl
File.Exists("\server\Ordner1\Ordner2\datei.doc") true zurück. Das dies mit
J:\ nicht funktioniert leuchet mir ein, da dies ja ein Netzlaufwerk ist.

Ich möchte gerne hier mir den aktuellen Account arbeiten und nicht immer
über meinen. Ich habe schon versucht dies Codeseitg per
System.Security.Principial zu realisieren. Doch diese brachte ebenfalls nicht
den gewünschten Erfolg.

Vielleicht habt ihr ja noch einen Tipp für mich.

Ich bedanke mich jetzt schonmal. Suche schon lange nach einer Lösung

Gruss plongo


Woher soll ich wissen, was ich denke, bevor ich höre, was ich sage!
Kurzum: Läufer sind gesünder, "gescheiter" und glücklicher als Nichtläufer.
www.andreas-nicole.de

C
1.215 Beiträge seit 2004
vor 18 Jahren

Füge in der Web.config 'mal folgendes hinzu...

<deny users="?"/>

(ins authorization-Tag)

Jetzt sollte der Anmeldedialog erscheinen.

Grüsse

P
plongo Themenstarter:in
123 Beiträge seit 2006
vor 18 Jahren

Hallo,

du bist doch auch im www.aspforum.de tätitg? Dein Nickname kommt mir doch bekannt vor!

Also ich werde morgen mal dein Antwort versuchen umzusetzen.

Aber der Anmeldedialog wird mir angezeigt, zumindens im Mozilla Firefox. Der IE unterstützt doch die direkte Weitergabe des Accounts (der Creditinials)?

Dies habe ich in der SDK gelesen, da irre ich mich doch nicht?

Wenn ich mir jetzt folgende Befehle ausgebe:
lbmessage.Text &= User.Identity.Name & "<br />"
lbmessage.Text &= WindowsIdentity.GetCurrent().Name & "<br />"

Bekomme ich immer meinen aktuellen Account angezeigt der in der Domain genutzt wird.

Im IIS habe ich die Win.-Auth aktiviert und die Anonym.-Auth deaktiviert. In der web.Config nutze ich die Windows-Mode, sowie setzte ich das attribut impersonate auf true.

trotzdem funktioniert nicht der zugriff auf das netzwerk. gebe ich der web.config jetzt in der identity-element jetzt nch mein username und pwd mit klappt alles einswandfrei.

das kommt mir spanisch vor?

was mach ich da falsch

Danke & Gruss plongo

Gruss plongo


Woher soll ich wissen, was ich denke, bevor ich höre, was ich sage!
Kurzum: Läufer sind gesünder, "gescheiter" und glücklicher als Nichtläufer.
www.andreas-nicole.de

P
plongo Themenstarter:in
123 Beiträge seit 2006
vor 18 Jahren

Keine eine Ahnung?

ich habe schon alles versucht. Aber es will einfach net klappen!

Naja

Danke & Gruss plongo

Gruss plongo


Woher soll ich wissen, was ich denke, bevor ich höre, was ich sage!
Kurzum: Läufer sind gesünder, "gescheiter" und glücklicher als Nichtläufer.
www.andreas-nicole.de

T
120 Beiträge seit 2005
vor 18 Jahren

Hi,

also ich hab mir jetzt nicht alles durchgelesen hier, aber im Internet-Explorer sollte in den Intranet-Sicherheitseinstellung für Authentifiaction nicht auf automatisch stehen. Der Firefox fragt so oder so, der I-Net-Explorer steht, zumindest ist es bei uns so, im Intranet auf automatisch authentifizieren.

P
plongo Themenstarter:in
123 Beiträge seit 2006
vor 18 Jahren

ok danke muss ich direkt mal testen 😁

Gruss plongo

Gruss plongo


Woher soll ich wissen, was ich denke, bevor ich höre, was ich sage!
Kurzum: Läufer sind gesünder, "gescheiter" und glücklicher als Nichtläufer.
www.andreas-nicole.de

P
plongo Themenstarter:in
123 Beiträge seit 2006
vor 18 Jahren

Du meinst also in IE unter Internetoptionen > Sicherheit > Lokales Intranet > Stufe anpassen > Benutzerauthentifizierung > nach Benutername und Kennwort fragen

Bzw. könnte ich dort auch auswählen > Automatische Anmeldung mit aktuellen Benutzername und Kennwort?

Gruss plongo

Gruss plongo


Woher soll ich wissen, was ich denke, bevor ich höre, was ich sage!
Kurzum: Läufer sind gesünder, "gescheiter" und glücklicher als Nichtläufer.
www.andreas-nicole.de

T
120 Beiträge seit 2005
vor 18 Jahren

Meiner Erfahrung nach funzt das mim IE nicht wirklich ... ich hab mich nämlich auch lang mit dem Problem auseinander gesetzt ... letztenendes hab ich aber die Einstellung am IE einfach gedreht, bzw den FF benutzt.

P
plongo Themenstarter:in
123 Beiträge seit 2006
vor 18 Jahren

Ich habe jetzt mal deine option versucht.

Jetzt bekomm ich die Fehlermeldung:

CryptoAPI cryptographic service provider (CSP) for this implementation could not be acquired. 

Hmm naja, ich werde es mal versuchen mit der weitergabe des Benutzers und kennwort. Mal schauen ob das was bringt.

Ich weiss ja nicht ob ich irgendeine Einstellung vergessen habe.

  1. IIS ist nur auf Win-Auth.
  2. web.config ist mit Win-Mode
  3. web.config ist impersonate true

Bei der Augabe des aktuellen User in httpContext bzw. mit WindowsIdentity bekomme ich immer meinen Account angezeigt. Dennoch klappt es nicht.

Ausser ich stelle eben in der web.config das identity-element mit meinen Benutername und Kennwort ein. Dann klappts. Das ist im IE und FF

Gruss plongo


Woher soll ich wissen, was ich denke, bevor ich höre, was ich sage!
Kurzum: Läufer sind gesünder, "gescheiter" und glücklicher als Nichtläufer.
www.andreas-nicole.de

P
plongo Themenstarter:in
123 Beiträge seit 2006
vor 18 Jahren

Das Problem ist das soweit ja alles klappt ich bin mit meinen Benutername authentifiziert und kriege das ja auch gemeldet.

nur wenn ich versuche eine email zu versenden mmit NTLM + einer Datei aus den dem Netzwerk. da klappt es dann nicht!!!

Ich vermute mal das dort das Token wohl nicht weitergeben wird ?!

Gruss plongo


Woher soll ich wissen, was ich denke, bevor ich höre, was ich sage!
Kurzum: Läufer sind gesünder, "gescheiter" und glücklicher als Nichtläufer.
www.andreas-nicole.de

C
1.215 Beiträge seit 2004
vor 18 Jahren

Die Einstellungen am IIS sind egal, denn sie werden von der web.config für die website überschrieben.

Diese web.config-Einstellung funktioniert bei mir einwandfrei...



<?xml version="1.0"?>
<configuration>
    <system.web>
        <authentication mode="Windows"/>
        <authorization>
            <deny users="?"/>
        </authorization>
        <identity impersonate="true"/>
    </system.web>
</configuration>

Dein Fehler muss irgendwo anders stecken.

Grüsse

P
plongo Themenstarter:in
123 Beiträge seit 2006
vor 18 Jahren

OK dann verwende ich mal deine Config und setze mal im IIS die Auth um bzw. kann ich es ja lassen, das es nach deiner meinung her egal ist.

Nur die Frage ist wo kann der Fehler denn noch liegen? X( 8o

Gruss plongo


Woher soll ich wissen, was ich denke, bevor ich höre, was ich sage!
Kurzum: Läufer sind gesünder, "gescheiter" und glücklicher als Nichtläufer.
www.andreas-nicole.de

P
plongo Themenstarter:in
123 Beiträge seit 2006
vor 18 Jahren

Glaubst du wirklich das die IIS-Einstellung egal ist?

Für dieses Szenario brauche im IIS schon die Win-Auth. oder verstehe ich dich falsch.

Achja ich nutze IIS 6 und .NET 1.1

Also
IIS -> Win.Auth


	<system.web>
		<authentication mode="Windows" />
		<identity impersonate="false" />
		<authorization>
			<deny users="?" />
		</authorization>
	</system.web>

Test: Ausgabe des Bentuzers


<%="1. " & User.Identity.Name%><br />
<%="2. " & System.Security.Principal.WindowsIdentity.GetCurrent.Name %><br />
<%="3. " & System.Threading.Thread.CurrentPrincipal.Identity.Name %>

Ausgabe
1. PSH1\Andreas
2. NT-AUTORITÄT\NETZWERKDIENST
3. PSH1\Andreas

Sezte ich web.Config
<identity impersonate="true" /> erhalte ich die Ausgabe


1. PSH1\Andreas
2. PSH1\Andreas
3. PSH1\Andreas

jetzt kann ich doch davon ausgehen das er mit meiner Identität arbeitet. Arbeite der Email-Versand über NTLM + Zugriff auf eine Dateim im Netzwerk klappt net, ausser ich setzte mein Account im identity Element.

Gruss plongo


Woher soll ich wissen, was ich denke, bevor ich höre, was ich sage!
Kurzum: Läufer sind gesünder, "gescheiter" und glücklicher als Nichtläufer.
www.andreas-nicole.de

C
1.215 Beiträge seit 2004
vor 18 Jahren

Original von plongo
Glaubst du wirklich das die IIS-Einstellung egal ist?

Für dieses Szenario brauche im IIS schon die Win-Auth. oder verstehe ich dich falsch.

Genau das macht ja <authentication mode="Windows" /> für Dich.
😉

Achja ich nutze IIS 6 und .NET 1.1

Original von plongo
Sezte ich web.Config
<identity impersonate="true" /> erhalte ich die Ausgabe

  
1. PSH1\Andreas  
2. PSH1\Andreas  
3. PSH1\Andreas  
  

jetzt kann ich doch davon ausgehen das er mit meiner Identität arbeitet. Arbeite der Email-Versand über NTLM + Zugriff auf eine Dateim im Netzwerk klappt net, ausser ich setzte mein Account im identity Element.

Ja, eigendlich sollte das jetzt funktionieren. Bei mir lokal tut es das auch - keine Ahnung, warum Du im Netzwerk damit Probleme hast.

Kannst ja noch mal was in der Art versuchen



using System.Security.Principal;
...
WindowsImpersonationContext context = this.User.Identity.Impersonate();
// Der Code, der die Rechte benötigt...
context.Undo();

So kannst du das im Code ein- und ausschalten.

Grüsse

P
plongo Themenstarter:in
123 Beiträge seit 2006
vor 18 Jahren

tja mir gehen mittlerweile die Ideen aus

hab nochmal folgendes probiert


<script language="vb" runat="server">
	Sub Page_Load()
		Dim context As System.Security.Principal.WindowsImpersonationContext = CType(User.Identity, System.Security.Principal.WindowsIdentity).Impersonate()
		
		response.write("1. " & User.Identity.Name & "<br />")
		response.write("2. " & System.Security.Principal.WindowsIdentity.GetCurrent.Name & "<br />")
		response.write("3. " & System.Threading.Thread.CurrentPrincipal.Identity.Name & "<br />")
		response.write(System.IO.File.Exists("\\spsdat\ps\OrgBer\Marketing\Interne Kommunikation\Anhänge\neue_mitarbeiter.doc"))
		
		'// Der Code, der die Rechte benötigt...
		context.Undo()
	End Sub	
</script>

Ergebnis:

  1. PSH1\Andreas
  2. PSH1\Andreas
  3. PSH1\Andreas
    False -> true wäre schöner 😁

Ich habe ehrlich gesagt keine Ahnug mehr, was ich nach alles machen kann, soll, muss. Wohl oder übel muss ich alles über meine Account laufen lassen. Es zwar die die feine lösung, aber was bleibt mir anderes übrig?

Gruss plongo


Woher soll ich wissen, was ich denke, bevor ich höre, was ich sage!
Kurzum: Läufer sind gesünder, "gescheiter" und glücklicher als Nichtläufer.
www.andreas-nicole.de

P
plongo Themenstarter:in
123 Beiträge seit 2006
vor 18 Jahren

@Cord
Hast du bei deiner Win-Auth. noch irgendwas bestimmes eingestellt? Ausser IIS, web.config?

Gruss plongo


Woher soll ich wissen, was ich denke, bevor ich höre, was ich sage!
Kurzum: Läufer sind gesünder, "gescheiter" und glücklicher als Nichtläufer.
www.andreas-nicole.de

P
plongo Themenstarter:in
123 Beiträge seit 2006
vor 18 Jahren

hilft vielleicht die seite noch weiter??

http://de.gotdotnet.com/quickstart/aspplus/doc/windowsauth.aspx

Gruss plongo


Woher soll ich wissen, was ich denke, bevor ich höre, was ich sage!
Kurzum: Läufer sind gesünder, "gescheiter" und glücklicher als Nichtläufer.
www.andreas-nicole.de

C
1.215 Beiträge seit 2004
vor 18 Jahren

Neee, habe ich nicht.
Es ist mir schleierhaft, warum das so nicht hinhaut, weil es doch eigendlich (logisch gesehen) keinen Unterschied zwischen den zwei Lösungen gibt, vor allem, da Du denselben Account verwendest.
...keine Ahnung, was da jetzt noch intern abläuft, wodurch die Lösung mit dem eingetragenen username und pwd hinhaut und das andere nicht.
???

P
plongo Themenstarter:in
123 Beiträge seit 2006
vor 18 Jahren

ich müsste es vielleicht mal auf einen anderen Testsystem ausprobieren....
Das mach ich vielleicht mal auf meiner lokalen Win XP Maschine....

Hmm naja ich weiss jetzt auch nicht mehr weiter..... Micht wunderst es auch warum er dort diese Probleme hat.... Aber solange werde ich eben mit meinen Account arbeiten müssen

trotzdem danke ich euch füre eure hilfe

Gruss plongo


Woher soll ich wissen, was ich denke, bevor ich höre, was ich sage!
Kurzum: Läufer sind gesünder, "gescheiter" und glücklicher als Nichtläufer.
www.andreas-nicole.de

5.941 Beiträge seit 2005
vor 18 Jahren

Original von plongo
Hallo,

du bist doch auch im
>
tätitg? Dein Nickname kommt mir doch bekannt vor!

Salü Andreas

Du.. hier? 😁
Cord wirst du wohl noch wiedererkennen (früher Chief Browdie), unser .NET Guru im ASP Forum 😉

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

P
plongo Themenstarter:in
123 Beiträge seit 2006
vor 18 Jahren

hi Peter 😄,

man das Inet ist aber klein....

ja ich habe vorkurzem auch privat mit C# angefangen zu programmieren. Deshalb habe ich mich vorgestern hier mal angemeldet.

Und da mir leider keiner im aspforum.de helfen konnte zu diesem Thema, dachte ich vielleicht hier.

Chief Browdie sag mir auch was. Hab auch im Mitglieder-Bereich gesehen das Cord... dort registriert ist.

Bis nachher dann 😁

Gruss plongo


Woher soll ich wissen, was ich denke, bevor ich höre, was ich sage!
Kurzum: Läufer sind gesünder, "gescheiter" und glücklicher als Nichtläufer.
www.andreas-nicole.de