Frage

Ich suche eine Config-Datei zu schreiben, die für RESTful Dienste in WCF ermöglicht, aber ich will immer noch die Fähigkeit zu ‚anzapfen‘ den Mitgliedschaftsanbieter für Benutzername / Passwort-Authentifizierung.

Die unten ist Teil meiner aktuellen config basicHttp Bindung oder wsHttp w / out WS-Security, wie wird diese Änderung w / REST basierte Dienste?

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

Lösung 7

UPDATE 2012.01.23

Da ich diese Frage habe ich einen viel besseren Ansatz zur Sicherung des RESTES wie Web-Service in der freien Natur gesehen habe. Es klang komplex, wenn ich zum ersten Mal davon gehört, aber die Idee ist einfach und alle über das Internet für beide Web-Service und andere sichere Kommunikation.

Es erfordert die Verwendung von öffentlichen / privaten Schlüsseln.

1.) Jeder Benutzer (Kunde) des Endpunkts muß mit Ihrem REST Web-Service registrieren

  • a.) Sie dem Benutzer einen privaten Schlüssel geben, die nicht mit anderen geteilt werden sollen, mit jemand
  • b.) Sie auch einen öffentlichen Schlüssel erzeugen, die über den Draht gehen im Klartext muss, wenn sein (dies kann auch verwendet werden, um den Client zu identifizieren)

2). Jede Anforderung von dem Benutzer benötigt einen Hash zu erzeugen, um die Anforderung zu unterzeichnen

  • a) Ein Beispiel hierfür könnte wie folgt aussehen:. Private Schlüssel + Zeitstempel + kodierte Nutzlast (wenn klein genug, wie eine einfache Benutzerinfo zum Beispiel aktualisiert werden)
  • b.) Sie nehmen diese 3 (oder was auch immer Sie beschlossen) und erzeugen einen 1-Weg-Hash (unter Verwendung von HMAC zum Beispiel)
  • c.) In der Anforderung wird über den Draht Sie den öffentlichen Schlüssels (so dass die Server-Seite weiß bist gesendet, die diese Anfrage) versucht zu senden, die Hash, der w / die privaten Schlüssel, und den Zeitstempel generiert wurde.

3.) Der Server-Endpunkt (Ihre REST-Methode) muß einen Hash erzeugen, um die gleichen Eingaben unter Verwendung von auf dem Client verwendet wird. Dieser Schritt wird beweisen, dass Client und Server einen privaten Schlüssel wussten, dass der öffentlichen Schlüssel zusammen mit der Anfrage übergeben abgestimmt. (Dies wiederum bedeutet, dass der Benutzer sendet die Anfrage legit ist wie sonst niemand die privaten Schlüssel kennen konnte)

  • a.) Lookup der Kunden private Schlüssel mit dem öffentlichen Schlüssel zusammen während der Anforderung übergeben wird

  • b.) Den anderen params (Zeitstempel und die codierte Nutzlast) zusammen mit dem privaten Schlüssel, den Sie im vorherigen Schritt gefunden und verwenden den gleichen Algorithmus, um einen 1-Weg-Hash zu erzeugen (wieder hmac ist, was ich habe verwendet gesehen in der realen Welt)

  • c.) Der resultierende 1-Weg-Hash muss den Hash über den Draht geschickt anzupassen, wenn nicht ein 400 (oder was auch immer http Code zurückschicken Sie halten eine „schlechte Anfrage“)
  • sein

Andere Tipps

Hier ist ein Podcast auf WCF REST-Service mit dem ASP.net Mitgliedschaftsanbieter zu sichern:

http: // Channel9. msdn.com/posts/rojacobs/endpointtv-Securing-RESTful-services-with-ASPNET-Membership/

ich mit Darrel darüber einig, dass komplexe REST-Szenarien über WCF sind eine schlechte Idee. Es ist einfach nicht schön.

Allerdings hat Dominick Baier einige gute Beiträge über dieses auf seinem Least Privilege Blog.

Wenn Sie möchten, dass WSSE Authentifizierungsunterstützung mit Rückfall sehen, Unterstützung auf WCF FormsAuthenticationTicket Besuche die Quellcode BlogService .

Bevor Sie diesen Weg weiter nach unten zu kämpfen REST über WCF zu implementieren, ich schlage vor, Sie lesen dieser Beitrag von Tim Ewald. Ich war vor allem durch die folgende Anweisung betroffen:

  

Ich bin mir nicht sicher, ob ich auf einem bauen will   Schicht ausgelegt HTTP Faktor in auf   Oberseite einer Schicht, die entworfen wurde,   Faktor es aus.

Ich habe in den letzten 12 Monate damit verbracht, REST basiertes Material mit WCF zu entwickeln und diese Aussage hat dich so wahr immer und immer wieder erwiesen. IMHO was WCF auf den Tisch bringt wird durch die Komplexität überwiegt, es zu tun REST Arbeit führt.

Unabhängig davon, ob die Gemeinde hat Meinungen gegen REST auf WCF (Ich bin persönlich auf dem Zaun) Microsoft einen Schlag an die sie getroffen hat, http://msdn.microsoft.com/en-us/netframework/cc950529.aspx

Ja mit Moto vereinbart, ein Link von der WCF Starter Kit ist das nächste, was ich auf die Authentifizierung von Berechtigungsnachweisen sah einen benutzerdefinierten HTTP-Header ( http://msdn.microsoft.com/en-us/library/dd203052.aspx ).

Allerdings konnte ich nicht bekommen das Beispiel gehen.

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