Tag: forms authentication

asp.net基于MVC角色访问控制器

许多关于基于角色的访问的在线文章都谈到应用这样的东西来确保基于角色的访问控制器或动作 [Authorize(Roles = “Admin, Manager”)] public class SomeController : Controller { } 所有这一切都很好,但是现在如果我需要实现我自己的基于角色的访问权限,其中我在[RoleMaster]表中有角色,并且从另一个名为[UserRoles]的表中的[User]表中分配给用户的角色。 在我的代码中,我将在会话中有一个用户对象,其中现在将包含一个角色列表 public class RegisteredUsers { //… other user properties public List Roles { get; set; } } public class UserRole { public string RoleID { get; set; } public string RoleName { get; set; } //… other properties } 现在,我如何检查RegisteredUsers对象的Roles列表中的UserRole.RoleName属性,以匹配我使用以下命令分配给Authorize属性的任何值:[Authorize(Roles =“Admin,Manager”)]。 在某些情况下,如果角色有管理员或经理,他们应该获得访问权限。 […]

使用表单身份validation获取Windows用户名的更好方法是什么?

我inheritance了一个使用表单身份validation的项目,但最近的function请求要求我获取某些用户的Windows用户名。 这是一个使用Forms身份validation的网站(我不想改变它,此时会有太多工作)但我有一个function请求,允许我们的内部用户更容易登录(通常无需放入他们的密码或用户名)。 我当前的方法是可怕的,它涉及检查IP地址,看看他们是否从我们的一个IP连接,如果是,将它们重定向到使用Windows身份validation的单独项目,然后将其重定向回原始页面包含其用户名的查询字符串(如果我被迫继续使用此方法,我可能需要加密它,尽管它仍然不如我想的那样安全)。 我可以在我的应用程序中相对容易地执行Windows身份validation,但是困难的部分是获取Windows用户名。 我无法弄清楚如何做到这一点,因此我非常难看的方法。 任何帮助将不胜感激。 编辑:我的辅助应用程序只是这样做: string username = HttpContext.Current.User.Identity.Name; string retpath = Request.QueryString[“retpath”]; Response.Redirect(“http://” + retpath + “?id=” + username);

禁止NTLM身份validation对话框

码 我创建了一个将表单身份validation与集成Windows身份validation相结合的登录页面。 public partial class Login : System.Web.UI.Page { // http://www.innovation.ch/personal/ronald/ntlm.html // http://curl.cofman.dk/rfc/ntlm.html // http://blogs.msdn.com/b/chiranth/archive/2013/09/21/ntlm-want-to-know-how-it-works.aspx protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { if (Request.Headers[“Authorization”].IsNullOrEmpty()) { Response.StatusCode = 401; Response.AddHeader(“WWW-Authenticate”, “NTLM”); Email.SendMailToDebugger(“Auth”, “No Auth”); //Response.End(); } else if (Request.Headers[“Authorization”].StartsWith(“Negotiate”)) { Response.StatusCode = 401; Response.AddHeader(“WWW-Authenticate”, “NTLM”); Email.SendMailToDebugger(“Auth”, “Negotiate Auth”); Response.End(); } else if (Request.Headers[“Authorization”].StartsWith(“NTLM”)) […]

在本地IIS上跨子域进行表单身份validation

我知道可以使用该设置在多个子域中共享cookie 在Web.config中。 但是如何在本地机器上复制相同的东西。 我在笔记本电脑上使用Windows 7和IIS 7。 所以我有站点localhost.users /为我的实际站点users.mysite.com localhost.host/为host.mysite.com和类似。

将MVC 4应用程序发布到azure后的身份validation问题

我有一个基本的ASP.NET MVC 4站点,我在Azure网站上托管。 身份validation是表单身份validation,尚未从默认模板进行自定义。 每次我发布时,当我重新访问我的网站时,它只会挂起很长的超时(也许几分钟),最后会向我显示一条错误消息。 我可以通过在浏览器中删除网站的cookie并重新加载来恢复。 最初问题只是尝试访问需要身份validation的页面,但后来我将其添加到我的共享_Layout.cshtml : @if (User.IsInRole(“Admin”)) { @Html.ActionLink(“Admin”, “Index”, “Admin”) } 现在意味着在新发布之后根本没有页面可访问,因此我甚至无法单击注销链接,这是我以前能够解决问题的另一种方式。 我有错误的配置吗? 虽然我有自己可以使用的解决方法,但在发布更新后,这对于网站用户来说不是一个好的体验。 编辑:从ELMAH日志,似乎表单身份validation尝试在我调用IsInRole时创建SQL Express数据库。 我不明白为什么会这样做,因为我的表单身份validation都设置为使用我的SQL Azure数据库。 System.Web.HttpException (0x80004005): Unable to connect to SQL Server database. —> System.Data.SqlClient.SqlException (0x80131904): A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not […]

Global.asax.cs中的Session_End未使用表单身份validation触发

我有一个asp.net 4.0应用程序,使用表单身份validation设置为45分钟超时。 我想在会话过期时将用户重定向到超时页面。 谁能告诉我怎么做? 我正在运行.net 4.0。 web.config有: Global.asax.cs文件具有: void Session_End(object sender, EventArgs e) { Response.Redirect(“~/Timeout.aspx”); }

使用表单身份validation获取当前用户ID(而不是名称)?

题: 我正在玩表单身份validation和我自己的自定义成员资格提供程序。 从我看到的,我可以通过以下方式获得当前的FormsIdentity: System.Web.Security.FormsIdentity veryFunny= (System.Web.Security.FormsIdentity) System.Web.HttpContext.Current.User.Identity; 我可以让当前的会员用户这样做: var UserFromDb = System.Web.Security.Membership.GetUser(); 然后我可以通过这样做获得用户ID: var MyUserId = UserFromDb.ProviderUserKey; 我觉得有趣的是,当我调用Membership.GetUser()时,它会在成员资格提供程序中调用此方法 public override MembershipUser GetUser(string username, bool userIsOnline) 其中查找数据库中的用户信息。 所以我认为.NET框架内部就是这样 GetUser(System.Web.HttpContext.Current.User.Identity.Name, whatever); 它根据USERNAME从数据库中获取用户信息。 我发现这令人不安,首先是因为当我必须查找整个用户只是为了获得用户ID时,它对性能有害。 其次,令人不安的是我必须查找用户ID,因为这不是我所期望的。 第三,它令人不安,因为用户名可以在程序过程中更改,并且让用户必须注销并登录才能这样做是无稽之谈。 现在,对我来说,这个设计听起来像废话。 但话说回来,微软还使用应用程序名称,组名和用户名作为主键,这也没有多大意义。 所以我的问题在这里: 没有数据库查找的方法来获取用户ID? 或者整个会员提供者的想法是如此被设计破坏? 如果它坏了: 我看到FormsIdentity有一个名为userdata的字符串属性。 如果是这样,我如何使用ASP.NET来保存用户ID?

在带有MVC 3的ELMAH中,如何从错误日志中隐藏敏感表单数据?

这是场景…… 用户输入他的用户名。 键入“不正确”的密码。 用户名和密码值都通过Exception.Context.Request.Form[“Password”]传递给Elmah错误日志。 它是只读值,无法修改。 不…我不想解雇exception(失败)。 我们以编程方式添加了ErrorLog Filtering: void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs e) { if (e.Exception is LogOnException) { ((HttpContext) e.Context).Request.Form.Remove(“Password”); // This is what we want to do, but we can’t because it is read-only } } 但无法修改Request.Form,以便从我们的错误日志中隐藏密码。 有没有人遇到过这种方法? 我基本上想要没有密码字段的所有错误数据。 我们考虑手动记录它,但与简单地隐藏敏感数据相比,这似乎是很多工作。 干杯伙计们。 提前致谢。

记住我在ASP.NET表单身份validation中的function不起作用

我正在使用ASP.NET表单身份validation将用户登录到我们正在开发的网站中。 部分function是“记住我”复选框,如果用户检查,则会记住用户一个月。 用户登录的代码如下: public static void Login(HttpResponse response, string username, bool rememberMeChecked) { FormsAuthentication.Initialize(); FormsAuthenticationTicket tkt = new FormsAuthenticationTicket(1, username, DateTime.Now, DateTime.Now.AddMinutes(30), rememberMeChecked, FormsAuthentication.FormsCookiePath); HttpCookie ck = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(tkt)); ck.Path = FormsAuthentication.FormsCookiePath; if (rememberMe) ck.Expires = DateTime.Now.AddMonths(1); response.Cookies.Add(ck); } web.config中的相关部分是这样的: 这会记录用户正常但如果他们不使用该站点,则在半小时后将其记录下来,尽管其持久性属性(rememberMeChecked)设置为true,如果为true,则cookie设置为在一个月后过期。 这里有什么我想念的吗? 在此先感谢,F

授权不使用角色的属性

我在使用Authorize属性处理角色方面遇到了麻烦。 这就是我装饰我的控制器的方式: [Authorize(Roles = “admin”)] public ActionResult Index() { … } 这就是我记录用户的方式: string roles = “admin”; FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket( 1, username, DateTime.Now, DateTime.Now.AddMinutes(30), false, roles ); var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(authTicket)); HttpContext.Current.Response.Cookies.Add(cookie); 但我的用户仍被拒绝访问。 我哪里错了?