In ASP.NET;Come posso accedere da una pagina HTML remota a un'altra pagina ASPX con l'appartenenza ad ASP.NET
Domanda
Fondamentalmente ho bisogno di accedere a un altro dominio che utilizza l'appartenenza ad asp.net.
Se abbiamo un'applicazione web ASP.net che utilizza l'appartenenza ASP.Net da un lato, e una pagina HTML da un altro dominio d'altra parte.
È possibile accedere al sito Web ASP.NET tramite una pagina HTML remota.
L'ho già fatto con Coldfusion, ma l'appartenenza ad ASP.NET utilizza un controllo server.
Saluti!
Soluzione
Sotto il controllo del server di accesso, ASP.NET utilizza un'implementazione di MembershipProvider e un'autenticazione basata su form per un utente con appartenenza ad ASP.NET. È possibile replicare questi passaggi senza utilizzare il controllo del server di accesso, convalidando manualmente le credenziali e quindi allegando il cookie FormsAuthentication
al Response
.
Ecco alcune risorse che dovrebbero aiutarti a iniziare:
- Comprensione del ticket e del cookie di autenticazione basata su moduli - MSDN
- Spiegazione: autenticazione basata su moduli in ASP.NET 2.0 - MSDN
- Esame dell'appartenenza, dei ruoli e del profilo di ASP.NET - 4guysfromrolla
Probabilmente trarrai anche vantaggio dalla riflessione sull'origine del controllo Login
, in modo da poter comprendere l'esatta sequenza di eventi che si verificano quando un utente accede utilizzando il controllo server. Questo dovrebbe renderti più facile capire come replicare quella funzionalità per il tuo particolare caso d'uso.
Come nota a margine, consiglierei di utilizzare un'implementazione IHttpHandler
personalizzata come punto di iniezione per l'elaborazione della richiesta di accesso, ma ci sono molti modi per eseguire questa operazione .
Aggiorna, mi sento generoso, quindi
Di seguito è riportato un gestore di esempio che è possibile utilizzare per accedere a un utente con ASP.NET Membership e FormsAuthentication (proprio come il controllo del server).
Questo codice presuppone:
- Esiste una mappatura configurata con Routing o web.config che chiamerà questo gestore.
-
La pagina richiedente ha un modulo che punta all'URL / route mappato nel web.config o con il routing e che il modulo su quella pagina contiene un campo di input
username
con il nomeusername
e unpassword
campo di immissione con il nomepassword
.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; } } }