使用Profile进行自定义身份验证的Windows身份验证

时间:2010-09-29 15:12:27

标签: asp.net forms-authentication windows-authentication global-asax anonymous

我对配置文件使用Windows身份验证,并希望翻转到自定义身份验证 我的问题是如何指定我的用户已经过身份验证以及如何设置Profile.UserName。
我知道Profile.UserName是ReadOnly
在我的Web.Config中,我更改了authentication mode="None"并将IIS配置为启用匿名。
在global.asax中,我验证用户是否存在Cookie,如果不存在,则用户将重定向到登录页面。当他提交时,我创建了cookie,此时,我会设置个人资料信息。

如果有人可以给我一些关于此的链接,我将非常感激。

1 个答案:

答案 0 :(得分:1)

听起来,表单身份验证可以处理您需要的内容。将以下行添加到根web.config

<authentication mode="Forms">
  <forms name="XXXXX.ASPXAUTH" timeout="60" loginUrl="~/login.aspx" protection="All" path="/"></forms>
</authentication>

将XXX替换为您想要调用cookie的任何内容。还要将login.aspx重命名为您命名为登录页面的任何内容。此代码会将未经过身份验证的任何人重定向到登录页面。

然后,在您的登录逻辑中使用类似下面的C#代码

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, txtUsername.Text,
     DateTime.Now, DateTime.Now.AddMinutes(60), true, reader["user_level"] + "",
     FormsAuthentication.FormsCookiePath);
string hash = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hash);
if (ticket.IsPersistent) cookie.Expires = ticket.Expiration;
Response.Cookies.Add(cookie);

使用此代码,您需要发送登录人员(即管理员,用户等)的用户级别,我有“读者[...”

您需要做的最后一件事是使用它自己的web.config设置每个受保护目录,该web.config概述了允许的用户角色和被拒绝的角色。您在web.config中用于角色的名称需要与发送到FormsAuthenticationTicket的值保持一致,您将会很高兴。