0

我在我的项目中实施 SimpleMembership 时遇到问题。基本上,我找不到任何有关限制访问页面的信息。这是我到目前为止所做的:

  1. 我有一个名为 default.aspx 的登录页面。通过将其添加到 web.config,我已经能够将 SimpleMembership 配置为识别 default.aspx 作为我的登录页面:
<appSettings>
    <add key="loginUrl" value="default.aspx" />
</appSettings>
  1. 我的 default.aspx 中有一个 WebMethod,用于通过 WebSecurity.Login 验证用户凭据。我通过 jquery ajax 调用 WebMethod:
[WebMethod, ScriptMethod]
public static bool Login(string userName, string password)
{
    return SecurityManager.Instance.Login(userName: userName, password: password);
}
  1. 在我的 jquery 代码的 ajax 成功处理程序中,我将用户重定向到另一个应受保护的页面(home.aspx):
success: function (data, textStatus, jqXHR) {
    if (data.d) {
        window.location.href = "home.aspx";
    }
    else {
        $("#invalidCredentialsBox").css("visibility", "visible");
    }
},

问题是,如果我尝试直接(从浏览器)访问 home.aspx,它实际上会加载。那么,我该怎么做才能使 SimpleMembership 限制对 home.aspx 的访问,直到用户成功登录?

我必须做的,不知道它是否是正确的解决方案,它是在 app_code 文件夹中创建一个基类。该类继承自System.Web.UI.Page,然后我将 home.aspx 更改为从该基类继承。在基类的构造函数中,我正在检查 WebSecurity.IsAuthenticated 属性,如果它为,那么我对我的 error.aspx 页面执行 Response.Redirect:

namespace MyProject
{
    public class BasePage : System.Web.UI.Page
    {
        public BasePage()
        {
            if (!SecurityManager.Instance.IsAuthenticated())
            {
                HttpContext.Current.Response.Redirect("error.aspx");
            }
        }
    }
}

以这种方式,它可以工作,但我觉得这不是实现它的正确方法。我发现的所有示例都使用 MVC,但我不是,实际上我对 MVC 几乎一无所知。请有人给出一些想法或指出我与.net web 项目一起使用 SimpleMembership 的相同文档/示例吗?

此外,还有哪些其他属性对 SimpleMembership 有效,我可以添加到 web.config 的 appSettings 部分?并且,如何设置 web.config 的身份验证部分以使用 SimpleMembership(我在 MVC 4 模板中看到,即使它使用 SimpleMembership,它仍然在 web.config 中设置表单身份验证部分)

谢谢。

4

1 回答 1

1

不要将授权与身份验证混淆。

授权决定谁可以访问什么。

你可以设置如下

<authorization>
  <allow users="Kim"/>
  <allow roles="Admins"/>
  <deny users="John"/>
  <deny users="?"/>
</authorization>

参考:Asp.net 授权

成员资格提供者负责身份验证。它的职责只是验证用户是他声称的那个人。

如果您网站的某个部分需要不同的授权规则,例如登录页面、默认页面或每个人都可以访问的公共文件夹,您可以使用location元素为其创建一个部分。

这将允许所有用户访问 Logon.aspx,即使站点的其余部分受到限制。

   <location path="Logon.aspx">
      <system.web>
         <authorization>
            <allow users="*"/>
         </authorization>
      </system.web>
   </location>
于 2013-01-03T04:13:47.843 回答