In ASP.NET;Wie kann ich mich mit ASP.NET-Mitgliedschaft von einer entfernten HTML-Seite auf einer anderen ASPX-Seite anmelden?
Frage
Grundsätzlich muss ich mich bei einer anderen Domain anmelden, die eine asp.net-Mitgliedschaft verwendet.
Wenn wir eine ASP.net-Webanwendung haben, die einerseits die ASP.Net-Mitgliedschaft verwendet, und eine HTML-Seite aus einer anderen Domain.
Ist es möglich, sich über eine entfernte HTML-Seite bei der ASP.NET-Website anzumelden.
Ich habe dies bereits mit Coldfusion gemacht, aber die ASP.NET-Mitgliedschaft verwendet ein Serversteuerelement.
Prost!
Lösung
Unter dem Anmeldeserver-Steuerelement verwendet ASP.NET eine MembershipProvider-Implementierung und eine Formularauthentifizierung für einen Benutzer mit ASP.NET-Mitgliedschaft. Sie können diese Schritte ohne Verwendung des Anmeldeserver-Steuerelements replizieren, indem Sie die Anmeldeinformationen manuell überprüfen und dann das FormsAuthentication
-Cookie an den Response
anhängen.
Hier sind einige Ressourcen, die Ihnen den Einstieg erleichtern sollen:
- Grundlegendes zum Formularauthentifizierungsticket und -cookie - MSDN
- Erklärt: Formularauthentifizierung in ASP.NET 2.0 - MSDN
- Prüfung der Mitgliedschaft, Rollen und des Profils von ASP.NET - 4guysfromrolla
Sie würden wahrscheinlich auch davon profitieren, über die Quelle des
Login
-Steuerelements nachzudenken, damit Sie die genaue Abfolge der Ereignisse verstehen, die auftreten, wenn sich ein Benutzer mit dem Serversteuerelement anmeldet. Dies sollte es für Sie einfacher machen zu verstehen, wie Sie diese Funktionalität für Ihren speziellen Anwendungsfall replizieren können.Als Randnotiz würde ich empfehlen, eine benutzerdefinierte
IHttpHandler
-Implementierung als Injektionspunkt für die Verarbeitung der Anmeldeanforderung zu verwenden. Es gibt jedoch viele Möglichkeiten, wie Sie diese Aufgabe ausführen können .Update, ich fühle mich großzügig, also
Nachfolgend finden Sie einen Beispielhandler, mit dem Sie einen Benutzer mit ASP.NET Membership und FormsAuthentication anmelden können (genau wie das Serversteuerelement).
Dieser Code setzt Folgendes voraus:
- Es gibt eine Zuordnung, die entweder mit Routing oder der Datei web.config konfiguriert ist und diesen Handler aufruft.
-
Die anfordernde Seite verfügt über ein Formular, das auf die URL / Route verweist, die in der web.config oder mit Routing zugeordnet ist, und dass das Formular auf dieser Seite ein
username
-Eingabefeld mit dem Namenusername
und einempassword
enthält Eingabefeld mit dem Namenpassword
.public class LoginHandler : IHttpHandler { void IHttpHandler.ProcessRequest(HttpContext context) { string username = context.Request["username"]; string password = context.Request["password"]; if (!string.IsNullOrWhiteSpace(username) && !string.IsNullOrWhiteSpace(password) && Membership.Provider.ValidateUser(username, password)) { FormsAuthentication.SetAuthCookie(username, true); RenderUserLoggedInResponse(context.Response,username); } else FormsAuthentication.RedirectToLoginPage("loginfailure=1"); } private static void RenderUserLoggedInResponse(HttpResponse response, string username) { response.Write(string.Format("You have logged in successfully, {0}!", username)); response.End(); } bool IHttpHandler.IsReusable { get { return true; } } }