WCF Connection nach windowsidentity.Impersonate()

08/12/2008 - 17:15 von Andreas Bürstner | Report spam
Hallo zusammen,
ich benutze einen WCF-Service um zu entscheiden, ob ein User die
Berechtigungen zu rAusführung eines programmes besitzt oder nicht.
Der Aufruf des Services funktioniert auch einwandfrei. Allerdings hab ich
nun die clientseitige Methode so erweitert, daß der user die Möglichkeit
bekommt in einem Loginfenster die Anmeldeinformationen eines anderen Users
einzugeben.
Mit diesen Informationen führe ich dann eine Ipersonation durch, und
versuche den Service erneut aufzurufen.
Hier der Ablauf der Impersonierung:
if (loginForm.ShowDialog() == DialogResult.OK)
{
currentUser = loginForm.UserName;
if (loginForm.UserName.IndexOf(@"\")>0)
{
string[] logonstrings =
loginForm.UserName.Split(@"\".ToCharArray());
IntPtr token = new IntPtr(0);
token = IntPtr.Zero;
bool returnValue =
LogonUser(logonstrings[1], logonstrings[0], loginForm.Password,

(int)LOGON32_LOGON_NETWORK,

(int)LOGON32_PROVIDER_DEFAULT,
ref token);

if (!returnValue)
{
continue;
}
WindowsIdentity identity = new
WindowsIdentity(token);
WindowsPrincipal principal = new
WindowsPrincipal(identity);
identity.Impersonate();
Thread.CurrentPrincipal = principal;
AppDomain.CurrentDomain.SetThreadPrincipal(principal);
curEmployee = provider.Login(Operation.ExecuteConsultantManager);
authorized = curEmployee != null;
}
else
{
continue;
}

}

Der WCF-Proxy wird über eine ChannelFactory neu erzeugt.

ChannelFactory<T> fact = new ChannelFactory<T>(EndpointName);
return fact.CreateChannel();

Vom Server erhalte ich nun beim Erneuten Aufruf folgende Meldung: "Der
Dienst erlaubt keine anonyme Anmeldung."
ExceptionType:System.IdentityModel.Tokens.SecurityTokenValidationException,
System.IdentityModel, Version=3.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089

Kann mir jemand weiterhelfen´?
Wie kann ich dafür sorgen, daß bei der erneuten Anfrage wieder die nun neue
Indendity mitgeliefert wird?

Vieln Dank schon mal für eure Hilfe
 

Lesen sie die antworten

#1 Frank Dzaebel
14/12/2008 - 19:39 | Warnen spam
Hallo Andreas,

[... WCF Dienst Impersonate ...] Vom Server erhalte ich nun
beim erneuten Aufruf folgende Meldung:
"Der Dienst erlaubt keine anonyme Anmeldung."



Das Stichwort ist hier "Delegierung".
Benutzerkonten von Administratoren auf Domànenebene
ist normal die Eigenschaft *"Konto kann nicht delegiert werden"*
zugewiesen.

[Richtlinien für die Sicherheit von Administratorkonten – Kapitel 3]
http://www.microsoft.com/germany/te...00356.mspx

Auf Computern mit Windows Server 2003 wird der Identitàtswechsel nur
unterstützt, wenn die Host-Anwendung über eine Berechtigung zum
Identitàtswechsel verfügt. Wechsle zum Hinzufügen dieser Berechtigung zu
einem Konto, auf dem der Dienst ausgeführt wird, zu *Verwaltung*, öffne die
*Lokale Sicherheitsrichtlinie* und *Lokale Richtlinien*, und klicke auf
*Zuweisen von Benutzerrechten*. Wàhle dann die Option *Annehmen der
Clientidentitàt nach Authentifizierung* aus, und doppelklicke auf
*Eigenschaften*, um einen Benutzer oder eine Gruppe hinzuzufügen.

[Delegierung und Identitàtswechsel mit WCF]
http://msdn.microsoft.com/de-de/lib...30088.aspx

[Durchführen eines Identitàtswechsels für den Client]
http://msdn.microsoft.com/de-de/lib...51513.aspx


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen