2

我基本上需要登录到另一个使用 asp.net 成员资格的域。

如果我们一方面有一个使用 ASP.Net Membership 的 ASP.net Web 应用程序,另一方面有一个来自另一个域的 HTML 页面。

是否可以通过远程 HTML 页面登录 ASP.NET 网站。

我以前用 Coldfusion 做过这个,但是 ASP.NET 成员使用的是服务器控件。

干杯!

4

1 回答 1

2

在登录服务器控件下,ASP.NET 使用 MembershipProvider 实现和表单身份验证来对具有 ASP.NET 成员资格的用户进行身份验证。您可以在不使用登录服务器控件的情况下复制这些步骤,方法是手动验证凭据,然后将FormsAuthenticationcookie 附加到Response.

以下是一些可以帮助您入门的资源:

您也可能会从反映Login控件的源代码中受益,因此您可以了解用户使用服务器控件登录时发生的事件的确切顺序。这应该使您更容易理解如何为您的特定用例复制该功能。

作为旁注,我建议使用自定义IHttpHandler实现作为处理登录请求的注入点,但是有很多方法可以完成此任务

更新,我感觉很慷慨,所以

下面是一个示例处理程序,您可以使用它来使用 ASP.NET Membership 和 FormsAuthentication 登录用户(就像服务器控件一样)。

此代码假定:

  1. 有一个使用路由或 web.config 配置的映射将调用此处理程序。
  2. 请求页面有一个表单,该表单指向在 web.config 或路由中映射的 url/route,并且该页面上的表单包含一个username带有 name的输入字段username和一个带有 name 的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; } }
        }
    
于 2012-01-17T08:26:08.707 回答