1

是否可以在没有数据库的情况下使用 WebSecurity 或 SimpleMembersshipProvider?这主要是因为我的 Web 服务器将使用来自“中央服务器”的所有逻辑,而不是直接访问数据库。

4

1 回答 1

2

当然。请参阅如何实现自定义会员提供程序:http: //www.codeproject.com/Articles/165159/Custom-Membership-Providers

基本上你需要做的是继承 MembershipProvider 类并实现 ValidateUser 等基本方法,一旦完成在 web.config 中注册新的提供者。您可以使用任何您喜欢的数据存储。

另一种选择是手动处理用户身份验证并使用 FormsAuthentication.Authenticate() 发送带有用户请求的身份验证 cookie。此方法也适用于 [Authorize] 过滤器,如果您愿意,我可以向您发送代码示例。

编辑:

public class CustomAuthorizeFilter : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var authenCookie = httpContext.Request.Cookies.Get(FormsAuthentication.FormsCookieName);
        if (authenCookie == null) return false;

        return true;
    }

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        filterContext.Result = new RedirectResult("/");
    }
}

登录方式:

var ticket = new FormsAuthenticationTicket(1, // version 
                                   token, // user name
                                   DateTime.Now, // create time
                                   DateTime.Now.AddDays(1), // expire time
                                   model.RememberMe, // persistent
                                   ""); // user data, such as roles
var strEncryptedTicket = FormsAuthentication.Encrypt(ticket);
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, strEncryptedTicket);
Response.Cookies.Add(cookie);
于 2013-04-20T21:52:33.187 回答