Frage

All dies ist im Zusammenhang Bindung an WebHttp, in einem benutzerdefinierten Diensthost gehostet (IIS ist keine Option zu diesem Zeitpunkt).

Ich habe eine benutzerdefinierte UserNamePasswordValidator implementiert und eine benutzerdefinierte IAuthorizationPolicy. Wenn ich der Endpunkt konfiguriere Bindung Standardauthentifizierung zu verwenden, funktioniert alles so wie ich (benutzerdefiniertes Haupt, benutzerdefinierte Rollen, etc ..) möchte.

Ich mag die Möglichkeit für anonymen HTTP-Zugriff hinzuzufügen als auch, und meine benutzerdefinierten Implementierungen haben die anonymen Benutzer in einigen Standardrollen setzen, etc .. (wenn kein Authenticate-Header gesendet wird).

Was passiert, ist jetzt, dass anonyme Benutzer einen 401 vor jedem meiner benutzerdefinierten Code gegeben getroffen wird. Wenn ich die HTTP-Basic-Authentifizierung Anforderung zu deaktivieren, dann wird der Authenticate-Header ignoriert zusammen.

Wie konfiguriere ich, oder injizieren ein Authenticate-Header , diese in beide Richtungen zu tun (ohne die Schaffung 2 separate Endpunkte)?

War es hilfreich?

Lösung

Zunächst einmal reagiert der Dienst korrekt an den anonymen Anruf nach der Spezifikation .

Zweitens ist dies unmöglich. Wenn Sie sich selbst Hosting sind für Sie da und Sie haben einige HTTP-Bindung, wird WCF eine System.Net.HttpListener Instanz verwenden zu können HTTP-Anfragen reagieren (in System.ServiceModel.Channels.SharedHttpTransportManager.OnOpen erstellt). Dieser Hörer hat eine Methode namens HandleAuthentication, die Art und Weise aufgerufen wird, bevor alle Ihre benutzerdefinierten Code genannt wird. Es ist verantwortlich für das Senden der 401-Antwort mit der Herausforderung (WWW-Authenticate) zurück. Es gibt nichts, was man dagegen tun kann. Wenn ja, würde Ich mag wissen.

Sie sind also mit den folgenden Optionen links:

  • zwei Endpunkte
  • konfigurieren Sie Ihre Kunden die Standard-Anmeldeinformationen wissen,
  • Ihre Kunden ändern, so dass sie auf die Herausforderung
  • reagieren

Andere Tipps

Ich habe in der Vergangenheit auf diese Forschung getan und festgestellt, dass es nicht möglich, durch die Konfiguration ist, wenn Sie 2 separate Endpunkte erstellen (das ist nicht das, was Sie wollen). Es ist einfach einfach nicht aus der Box von WCF unterstützt.

Allerdings ist WCF extrem anpassbar und man konnte dies wahrscheinlich tun, indem Sie einen benutzerdefinierten Channel zu schreiben /, dass die Bindung wird tun, was Sie wollen. Ich empfehle Ihnen, einen Blick auf die REST Schach Quellcode . Es sollten Sie beginnen.

Ihre beste Wette ist eine Standardrolle über eine Rolle-Provider zu implementieren und läßt anonyme Benutzer automatisch diese Rolle beitreten. Dann entweder programmatisch oder über Politik Injektion (aspektorientierte) Politik, so eingestellt, dass bestimmten anonymen Zugriff über die besondere Rolle erlaubt sein.

Wie das wieder wett über Konfigurationseinstellung, wenn es möglich ist, wäre es ziemlich schwierig und Art „Hacky“.

Das glaube ich nicht so ... Ich war gerade schreiben Sie müssen getrennte Endpunkt schaffen, wenn ich Sie fragen, wieder zu lesen entschieden und bemerkte die letzte Aussage Ihrer Frage. So ist die Antwort nein wäre (die ich kenne)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top