WCF-Authentifizierung mit SQL Membership Provider

Hoffentlich können Sie Leute einiges davon für mich klären. Ich habe eine Webanwendung, die den SQL-Mitgliedschaftsanbieter verwendet, und sie kommuniziert mit einer zweiten Webanwendung über einen WCF-Dienst. Beide Anwendungen nutzen denselben SQL-Mitgliedschaftsanbieter-Datenspeicher ... aber ich benötige jeden WCF-Dienstaufruf, um den Benutzer zu authentifizieren.

Nun habe ich mir eine Menge Beispiele angesehen, aber ich habe das Gefühl, dass die Beispiele, die ich gesehen habe, entweder bestimmten Code weglassen, weil er für mich "offensichtlich" sein sollte, oder ich verstehe falsch, wie WCF mit der Anfrage umgeht (siehe erwarteter Code unten).

Ich bin für jede Hilfe dankbar ...

HIER IST WAS ICH BEREITS ZU TUN KANN

Ich weiß, wie man die SQL-Mitgliedschaft auf beiden Seiten konfiguriert.Ich weiß, wie man das wsHttpBinding einrichtetIch weiß, wie das für die Transportsicherheit verwendete Dienstezertifikat eingerichtet wird.

Hier ist was ich verwirrt bin

Wie kann ich das Mitgliedskennwort weitergeben (... können Sie nicht)Ich übergebe das Authentifizierungs-Cookie? Wenn das so ist, wieErstelle ich einen "bekannten" Benutzernamen und ein Passwort, die nicht mit dem Benutzer (selbst) zusammenhängen?

M WEBKUNDEN WÜRDE ICH ETWAS ÄHNLICHES ERWARTEN, UM DEN CODE ZU SEHEN

protected void btnLogin_Click(object sender, EventArgs e)
{
    // Logging into the web-application is known and easy.
    if (Membership.ValidateUser("MyUserName", "MyPassword"))
    {
        FormsAuthentication.SetAuthCookie("MyUserName", true);
        FormsAuthentication.RedirectFromLoginPage("MyUserName", false);
    }
}

protected ServiceReference1.Contractor getContractor(Int32 key)
{
    // I expect something "like" this on the client call.
    MembershipUser user = Membership.GetUser("MyUserName");

    ServiceReference1.FishDataClient wcfService = new ServiceReference1.FishDataClient();

    // You can't retreive the users password directly,
    // nor can you get the hash from the SqlMembershipProvider.
    wcfService.ChannelFactory.Credentials.UserName.UserName = user.UserName;
    // So doing something like this would not be possible.
    wcfService.ChannelFactory.Credentials.UserName.Password = "??????";

    // So how is the web service going to authenticate the user from it's
    // references to the same SqlMembershipProvider (database).
    ServiceReference1.Contractor contractor = wcfService.GetContractor(key);

    wcfService.Close();
    wcfService = null;

    return contractor;
}

M WCF-SERVICE WÜRDE ICH ETWAS ÄHNLICHES ERWARTEN, UM DEN CODE ZU SEHEN

[PrincipalPermission(SecurityAction.Demand, Role = "User")]
public Contractor GetContractor(Int32 key)
{
    ServiceSecurityContext context = ServiceSecurityContext.Current;
    Contractor contractor = new Contractor();

    // What goes here?  I would expect something like this...
    if (Membership.ValidateUser("???????", "???????"))
        contractor.Get(key);

    return contractor;
}

Antworten auf die Frage(4)

Ihre Antwort auf die Frage