我基本上需要登录到另一个使用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(就像服务器控件一样)来登录用户。

    此代码假定:

    1. 有一个使用“路由”或web.config配置的映射将调用此处理程序。
    2. 请求页面的格式指向在web.config中或通过路由映射的url /路由,并且该页面上的表单包含一个名为usernameusernamepassword输入字段。名称为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; } }
          }
      

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top