Es klingt, als ob Sie nach dem Windows Communication Foundation Authentication Service suchen.
EDIT:
Nach dem erneuten Lesen der Frage genauer (und nach Ariel Kommentar) Ich mag würde den obigen Vorschlag zurückzuziehen. Der WCF-Authentifizierungsdienst wird diesem Szenario nicht viel hinzufügen.
Ich habe dies zwischen WCF und ASP.NET nicht getan, jedoch habe ich ASP.NET-Anwendungen für die Freigabe Formulare authentifizierte Benutzer konfiguriert, vielleicht kann ich in irgendeiner Weise helfen.
Um sicherzustellen, dass beide Anwendungen das Formularauthentifizierungs-Cookie auf die gleiche Weise verschlüsseln/entschlüsseln können, sollten Sie configure the <machineKey>
element für beide Anwendungen (in web.config oder machine.config abhängig davon, ob Sie dies auf der Maschinen- oder Anwendungsebene durchführen möchten)). Sie sollten sich die Attribute validation
, validationKey
, decryption
und decryptionKey
ansehen.
Stellen Sie sicher, dass Ihre <forms>
Elemente in beiden web.config-Dateien ähnlich konfiguriert sind. Insbesondere die Attribute name
, path
und domain
.
Es ist wahrscheinlich, dass dies nur für Cookies gilt für/von einem Web-Browser übergeben (kann aber auch in diesem Fall nützlich sein): So erlauben Sie Cookies zwischen den Websites weitergegeben werden www.foo.com und bar.foo .com Sie das forms
Element konfigurieren würde wie folgt Cookies zulassen auf der einen Seite und erfolgreich bestanden auf den anderen gesetzt werden:
<forms ... domain=".foo.com" ... />
Passing das Cookie an den WCF-Dienst ist wahrscheinlich der schwierige Bit sein. Ich bin nicht sehr mit WCF erfahren, so I've adapted code from kennyw.com:
HttpRequestMessageProperty httpRequestProperty = new HttpRequestMessageProperty();
httpRequestProperty.Headers.Add(HttpRequestHeader.Cookie, "<Forms Authentication Cookie>");
using (OperationContextScope scope = new OperationContextScope(serviceClient.InnerChannel))
{
OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = httpRequestProperty;
serviceClient.MethodName();
}
Wenn Sie WCF innerhalb IIS hosten (und nicht selbst Hosting) können Sie die WCF-Anforderung über die ASP.NET-Verarbeitungs-Pipeline passieren kann
durch Einstellen
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" ... />
</system.serviceModel>
Wenn Sie selbst sind Hosting Sie den Request-Header untersuchen konnten die eingehende Nachricht der Eigenschaften in OperationContext.Current.IncomingMessageProperties
und erhalten Sie die Formularauthentifizierung Cookie-Wert und entschlüsseln sie mit FormsAuthentication.Decrypt(string)
verwenden.
Ich habe keine Ahnung, ob das funktionieren würde, aber würde gerne hören, wenn es das tut!
Hallo Ariel, wie bist du mit diesem hier zurecht gekommen? Ich kenne jemanden mit ähnlichen Problemen. –