在ASP.NET中;如何从远程HTML页面登录到具有ASP.NET成员资格的另一个ASPX页面
题
我基本上需要登录到另一个使用asp.net成员身份的域。
如果我们一方面拥有一个使用ASP.Net成员资格的ASP.net Web应用程序,并且 另一方面,来自另一个域的HTML页面。
是否可以通过远程HTML页面登录ASP.NET网站。
之前我已经使用Coldfusion完成了此操作,但是ASP.NET成员身份正在使用服务器控件。
干杯!
解决方案
在Login Server控件的下方,ASP.NET使用MembershipProvider实现,并对具有ASP.NET Membership的用户进行表单身份验证。您可以通过手动验证凭据,然后将FormsAuthentication
cookie附加到Response
上,而无需使用Login Server控件来复制这些步骤。
以下一些资源可以帮助您入门:
- 了解表单身份验证票证和Cookie -MSDN
- 说明:ASP.NET 2.0中的表单身份验证-MSDN
- 检查ASP.NET的成员资格,角色和配置文件-4guysfromrolla
您可能还会从反思
Login
控件的源中受益,因此您可以了解用户在使用服务器控件登录时发生的确切事件顺序。这应该使您更容易理解如何针对您的特定用例复制该功能。作为一个旁注,我建议使用自定义的
IHttpHandler
实现作为处理登录请求的注入点,但是有很多方法可以完成此任务。更新,我很慷慨,所以
下面是一个示例处理程序,您可以使用该处理程序通过ASP.NET Membership和FormsAuthentication(就像服务器控件一样)来登录用户。
此代码假定:
- 有一个使用“路由”或web.config配置的映射将调用此处理程序。
-
请求页面的格式指向在web.config中或通过路由映射的url /路由,并且该页面上的表单包含一个名为
username
和username
的password
输入字段。名称为password
的输入字段。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; } } }
不隶属于 StackOverflow