Frage

Was ist der beste Ansatz, um sicherzustellen, dass Sie sich nur einmal authentifizieren müssen, wenn Sie eine auf WCF basierende API verwenden?

Meine aktuellen Bindungen und Verhaltensweisen sind unten aufgeführt

    <bindings>
        <wsHttpBinding>
            <binding name="wsHttp">
                <security mode="TransportWithMessageCredential">
                    <transport/>
                    <message clientCredentialType="UserName" negotiateServiceCredential="false" establishSecurityContext="true"/>
                </security>
            </binding>
        </wsHttpBinding>
    </bindings>
    <behaviors>
        <serviceBehaviors>
            <behavior name="NorthwindBehavior">
                <serviceMetadata httpGetEnabled="true"/>
                <serviceAuthorization principalPermissionMode="UseAspNetRoles"/>
                <serviceCredentials>
                    <userNameAuthentication userNamePasswordValidationMode="MembershipProvider"/>
                </serviceCredentials>
            </behavior>
        </serviceBehaviors>
    </behaviors>

Als nächstes verwende ich in meiner Client-App die Authentifizierung (derzeit muss ich dies jedes Mal tun, wenn ich einen Anruf bei WCF tätigen möchte).

Dim client As ProductServiceClient = New ProductServiceClient("wsHttpProductService")
client.ClientCredentials.UserName.UserName = "foo"
client.ClientCredentials.UserName.Password = "bar"
Dim ProductList As List(Of Product) = client.GetProducts()

Ich möchte mich einmal mit diesen Anmeldeinformationen bei der API authentifizieren und dann eine Art Token für den Zeitraum erhalten, in dem meine Clientanwendung das Webdienstprojekt verwendet.Ich dachte, „etablsecuritycontext=true“ hat das für mich erledigt?

War es hilfreich?

Lösung

Wenn Sie sich in einem Intranet befinden, kann die Windows-Authentifizierung allein durch die Konfiguration „kostenlos“ durchgeführt werden.

Wenn dies nicht angemessen ist, funktionieren Token-Dienste einwandfrei, in manchen Situationen sind sie jedoch möglicherweise einfach zu viel.

Die Anwendung, an der ich arbeite, benötigte eine einfache Authentifizierung.Unser Server und Client laufen in einem (sehr sicheren) Intranet, daher haben wir uns nicht allzu sehr um die Anforderung gekümmert, ein X.509-Zertifikat zur Verschlüsselung der Kommunikation zu verwenden, was erforderlich ist, wenn Sie die Benutzernamenauthentifizierung verwenden.

Also haben wir ein hinzugefügt individuelles Verhalten an den Client, der den Benutzernamen und das (verschlüsselte) Passwort zu den Nachrichtenkopfzeilen hinzufügt, und ein weiteres benutzerdefiniertes Verhalten auf dem Server, das diese überprüft.

Alles sehr einfach, es waren keine Änderungen an der clientseitigen Servicezugriffsschicht oder der Servicevertragsimplementierung erforderlich.Und da alles durch die Konfiguration erfolgt, ist die Migration einfach, wenn wir auf etwas Stärkeres umsteigen müssen.

Andere Tipps

Auch wenn ich es hasse, eine Antwort zu geben, bei der ich mir nicht hundertprozentig sicher bin, lässt mich der Mangel an Antworten bisher vermuten, dass eine potenziell richtige Antwort in diesem Fall in Ordnung sein könnte.

Soweit mir bekannt ist, gibt es mit WCF nicht den von Ihnen gewünschten Sitzungstoken-Mechanismus, der sofort einsatzbereit ist, was bedeutet, dass Sie einiges an Arbeit leisten müssen, um die Dinge im WCF zum Laufen zu bringen wie du willst.Ich sollte klarstellen, dass es in WCF einen Sitzungsmechanismus gibt, der sich jedoch auf die Gewährleistung der Nachrichtenreihenfolge konzentriert und nicht das ideale Tool zum Erstellen einer Authentifizierungssitzung ist.

Ich habe gerade die Arbeit an einem Projekt abgeschlossen, bei dem wir unseren eigenen Sitzungsmechanismus implementiert haben, um alle Arten von alten SOAP-Stacks zu verarbeiten. Ich glaube jedoch, dass die empfohlene Methode zur Implementierung authentifizierter Sitzungen die Verwendung eines Secure Token Service (STS) ist Pablo Cibraros.

Wenn Sie weitere Details wünschen, rufen Sie uns bitte an, aber ich vermute, dass Pablos Blog mehr als genug Informationen enthält, damit Sie weitermachen können.

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