Benutzer mit den meisten Antworten
Nutzerdaten übertragen

Frage
-
Hallo,ich habe einen WCF-Service, den ich mit Zertifikaten gesichert habe(Transport-Sercurity).Ich möchte jetzt bei jedem Aufruf des Services auch einen Nutzernamenmitschicken, da das Zertifikat auch von anderen Clients verwendet wirdund hierüber keine eindeutige Identifizierung des Nutzers möglich ist.Der Service soll aber jedesmal den Client Identifizieren können und ichmöchte nicht bei jedem Funktionsaufruf einen Nutzernamen mitgeben.Wie wird das gelöst?Gibt es irgendeine Möglichkeit, dem ServiceSecurityContext oderOperationContext diese Information hinzuzufügen?Bisher habe ich eine Lösung mit MessageInspektoren mit denen ichjedesmal einen Nutzernamen mitschicken kann, jedoch habe ich mir sagenlassen es gäbe da vielleicht Probleme, wenn man später größereNachrichten/Daten streamen will.Ich wäre für Hinweise und einfache Lösungen sehr DankbarLGJensPS: Leider falschen Betreff in der vorigen Nachricht eingesetzt, dahernoch einmal mit richtigem Betreff gepostet. Sorry
JEns D.- Bearbeitet Robert BreitenhoferModerator Donnerstag, 21. Oktober 2010 06:08 Titel Korrektur: ü
- Verschoben Robert BreitenhoferModerator Freitag, 22. Oktober 2010 08:15 WCF (aus:.NET Framework)
Mittwoch, 20. Oktober 2010 18:49
Antworten
-
Nur zur Info,
ich habe für die Identifizierung nun einen MessageInspektor hinzugefügt, der den jeweiligen OperationContext füllt die Header der Soap-Nachrichten um einen Weiteren zur Identifikation ergänzt.
Gru?
JEns D.- Als Antwort markiert Jens D. _ Donnerstag, 24. März 2011 15:27
Donnerstag, 24. März 2011 15:27
Alle Antworten
-
Hallo Jens
was seitens WCF hier eigentlich möglich ist:
Client Credential
http://msdn.microsoft.com/en-us/library/ms733836.aspx
http://msdn.microsoft.com/en-us/library/ms732391.aspx
http://blogs.msdn.com/b/pedram/archive/2007/10/05/wcf-authentication-custom-username-and-password-validator.aspx
http://www.google.com/search?q=wcf+%2Bclient+Credential+Certificate
oder was darüber hinaus suchst du genau?Mittwoch, 20. Oktober 2010 19:08 -
Hallo Thomas,vielen Dank für Deine Antwort. Um zu beschreiben, was ich darüber hinaussuche, sage ich noch einmal kurz, was ich habe:Clients verbinden sich mit dem Service auf einer TransportgesichertenVerbindung. Dazu verwende ich bei jedem Client das gleiche Zertifikat.Anhand des Zertifikats ist es also dem Service nicht möglich, den Clienteindeutig zu identifizieren.Was ich jetzt möchte ist, zusätzlich einen Nutzernamen o.ä. übertragenund dies, wenn möglich, nicht mit jedem Funktionsaufruf durch den jew.Client sondern es wäre schön, wenn ich diese Information weiter in einCredential packen könnte, das jeder Verbindung hinzugefügt ist. Wenn ichaber:am Client:var factory1 = new ChannelFactory<IService>("*");factory1.Credentials.UserName.UserName = "bob";factory1.Credentials.UserName.Password = "bob";var proxy = factory1.CreateChannel();diese Credentials setze, dann aber die Zertifikate und dieTransportverschlüsselung noch hinzufüge, dann kann ich:am Service mit:ServiceSecurityContext.Current.PrimaryIdentity.Namenicht mehr auf "bob" zugreifen, sondern habe den Namen/Info des Zertifikats.Mein Wunsch "darüber hinaus" wäre, an irgend einer Stelle wieder auf"bob" zu treffen, ohne z.B. mit einem Messageinspektor alles von Handmachen zu müssen.Gibt es diese Möglichkeit? Es muss nicht unbedingt über dieseCredentials gehen, aber ich hatte gehofft, auf diesem Weg noch die Datendes Nutzers mitgeben zu können - ohne viel Aufwand.LGJensPS: Genaugenommen wäre "bob" eine GUID als SessionID, die bei einerAnmeldung des Clients gestartet wurde und anhand derer er immer wiederidentifiziert werden soll.Am 20.10.2010 21:08, schrieb Thomas Scheidegger Dev:> Hallo Jens>> was seitens WCF hier eigentlich möglich ist:> Client Credential> http://msdn.microsoft.com/en-us/library/ms733836.aspx> http://msdn.microsoft.com/en-us/library/ms732391.aspx> http://blogs.msdn.com/b/pedram/archive/2007/10/05/wcf-authentication-custom-username-and-password-validator.aspx> http://www.google.com/search?q=wcf+%2Bclient+Credential+Certificate> <http://www.google.com/search?q=wcf+%2Bclient+Credential+Certificate>>> oder was darüber hinaus suchst du genau?>
JEns D.Donnerstag, 21. Oktober 2010 14:08 -
Jens,
evtl. geht dieser (alte, längere) Thread in diese Richtung:
Mixed credentials: Username & Certificate
http://social.msdn.microsoft.com/forums/en-US/wcf/thread/6db5c3db-84b1-40fe-8518-83d9aa40f100
oder Blogs
http://blogs.msdn.com/b/sajay/archive/2006/12/12/passing-a-username-as-a-supporting-token.aspx
http://blogs.msdn.com/b/sajay/archive/2006/12/12/web-hosted-sample-with-usernamepassword-supporting-token.aspx
http://blogs.msdn.com/b/drnick/archive/2007/11/28/using-supporting-tokens.aspx
http://weblogs.asp.net/cibrax/archive/2008/01/22/authenticating-users-with-supporting-tokens-in-wcf.aspx
http://www.leastprivilege.com/UserNameSupportingTokenInWCF.aspx
Und das (deutsche) Forum spezifisch für WCF wäre
http://social.msdn.microsoft.com/Forums/de-DE/wcfde/
(Moderatoren könnten verschieben)Donnerstag, 21. Oktober 2010 15:45 -
Danke für die Antwort, ich poste hier, weil im anderen Forum keineAntwort kam.Ich habe auf der Liste unten begonnen(>http://weblogs.asp.net/cibrax/archive/2008/01/22/authenticating-users-with-supporting-tokens-in-wcf.aspx> http://www.leastprivilege.com/UserNameSupportingTokenInWCF.aspx)und leider immer das Problem, dass ich das Binding nicht richtigeinrichten kann.Ich habe das Binding schon mit der App.config konfiguriert und möchtediese "Tokens" nun hinzufügen.Leider komme ich nicht über diese Fehlermeldung hinaus:Binding 'CustomBinding' doesn't support creating any channel types. Thisoften indicates that the BindingElements in a CustomBinding have been stackedincorrectly or in the wrong order. A Transport is required at the bottom of thestack. The recommended order for BindingElements is: TransactionFlow,ReliableSession, Security, CompositeDuplex, OneWay, StreamSecurity, MessageEncoding, Transport.Die Position des hinzugefügten Elements ist dabei egal, ich hab jedeausprobiert... Ich benutze Tcp-Binding und Zertifikate fürTransportsicherheit. Leider ist immer nur die PrimaryIdentity mit demZertifikat belegt, die WindowsIdentity Anonym und alles was ich sonsthinzufüge kommt nicht beim Service an.Ist vielleicht die Fehlermeldung ein Hinweis, der Dich zu weiteren Tippsverleiten könnte? Ich bin da ratlos..Vielen Dank für jede Hilfe!JensOk, jetzt ein intensiver Blick auf die anderen Links..>http://blogs.msdn.com/b/drnick/archive/2007/11/28/using-supporting-tokens.aspxEine freundliche Aufzählung, aber das hat mir nicht geholfen.>http://blogs.msdn.com/b/sajay/archive/2006/12/12/passing-a-username-as-a-supporting-token.aspxDa ich TCP-Binding habe scheint dies nicht zu funktionieren.>http://blogs.msdn.com/b/sajay/archive/2006/12/12/web-hosted-sample-with-usernamepassword-supporting-token.aspxDer IIS hat mich vollständig abgeschreckt, ich vermute, das trifft nichtauf mein Problemchen zu.Am Ende des ersten Threads(> evtl. geht dieser (alte, längere) Thread in diese Richtung:> /Mixed credentials: Username & Certificate/>http://social.msdn.microsoft.com/forums/en-US/wcf/thread/6db5c3db-84b1-40fe-8518-83d9aa40f100)hat jemand genau meine Frage, aber es gab keine Antwort mehr =(is it possible to achieve the same without IIS webhttpbinding usingself-hosting and net.tcp binding?because i can't seem to get it to work :)
JEns D.Freitag, 29. Oktober 2010 15:39 -
Nur zur Info,
ich habe für die Identifizierung nun einen MessageInspektor hinzugefügt, der den jeweiligen OperationContext füllt die Header der Soap-Nachrichten um einen Weiteren zur Identifikation ergänzt.
Gru?
JEns D.- Als Antwort markiert Jens D. _ Donnerstag, 24. März 2011 15:27
Donnerstag, 24. März 2011 15:27