.Net身份验证主要是分为三种 Windows | Forms | Passport ,其中Froms在项目中用的最多。

1、Windows身份验证

2、Froms验证

简单的身份验证

Forms 验证方式对基于用户的验证授权提供了很好的支持,可以通过一个登录页面验证用户的身份,将此用户的身份发回到客户端的Cookie,之后此用户再访问这个web应用就会连同这个身份Cookie一起发送到服务端。

服务端上的授权设置就可以根据不同目录对不同用户的访问授权进行控制了。

  要验证身份需要在 Web.xml进行配置

<authentication mode="Forms">
<forms defaultUrl="~/Home/Index" loginUrl="~/Account/Index" timeout="30"></forms>
</authentication>
loginUrl:在没有通过身份验证的情况下,跳转到的登录页面
defaultUrl:通过身份验证以后,在没有指向页的时候跳到的页面
timeout:超时时间(分钟)
    [AllowAnonymous]
public class AccountController : BaseController
{
/// <summary>
/// 简单的Forms登录
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
[HttpPost]
public ActionResult Login(Entity.T_UserModel model)
{
if (ModelState.IsValid)
{
//写入cookie票据
FormsAuthentication.SetAuthCookie(model.Account, false);
return Redirect(FormsAuthentication.DefaultUrl);
}
return View("Index");
} /// <summary>
/// 退出登录
/// </summary>
/// <returns></returns>
public ActionResult SignOut()
{
FormsAuthentication.SignOut();
return View();
}

  <forms>标签中的loginUrl指定如果没有找到任何有效的身份验证 Cookie,为登录将请求重定向到的 URL。默认值为 default.aspx。loginUrl指定的页面就是用来验证用户身份的,一般此页面提供用户输入用户名和密码,

用户提交后由程序来根据自己的需要来验证用户的合法性(大多情况是将用户输入信息同数据库中的用户表进行比较),如果验证用户有效,则生成同此用户对应的身份验证票,写到客户端的Cookie,最后将浏览器重定向到用户初

试请求的页面.一般是用FormsAuthentication.RedirectFromLoginPage 方法来完成生成身份验证票,写回客户端,浏览器重定向等一系列的动作.

  上面的 Login() 方法实现了用户登录,

  在需要通过权限验证的控制器添加 [Authorize] 过滤器,当没有经过授权的用户请求URL的时候会产生拦截,并重定向到 配置文件节点<Authentication />节点指向 loginUrl 登录页面,

   [AllowAnonymous]  ()过滤器添加在 登录Controller,否则将无法跳转到登录方法。

  1、登录:调用  FormsAuthentication.SetAuthCookie( );

  2、注销:调用  FormsAuthentication.SignOut();

保护受限制的文件或页面  

  在咱们的网站里,有的文件或者页面可能会允许所有的用户访问,有的可能需要经过授权的用户访问,有的可能只能特定角色的用户才能访问。这些页面或者文件受到限制(默认情况下只针对ASP相关的文件起作用,js 和HTML不起作用,需要单独设置),

  为了保护这些有着权限要求的页面,.Net 提供了设置的方式:

1、<Allow />允许的意思,<deny>拒绝的意思

2、(*)  代表所有用户,(?) 代表匿名用户 (未授权)

3、使用 users 属性时,多个值逗号分隔开。使用 roles 属性时,多个值用逗号分隔开。

4、如果某个资源只允许某类用户访问,那么最后的一条规则一定是  <deny users="*"/> ,<deny>一定写在后面!

必须经过授权以后才能访问 ,匿名用户不能访问

<location path="test.aspx">
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</location>

只能在admin,test这两个用户中,登录的用户才能访问

<location path="test.aspx">
<system.web>
<authorization>
<allow users="admin,test"/>
<deny users="?"/>
</authorization>
</system.web>
</location>

在拥有admin角色中登录的用户才能访问,其余用户都不能访问

<location path="test.aspx">
<system.web>
<authorization>
<allow roles="admin"/>
<deny users="*"/>
</authorization>
</system.web>
</location>

角色验证后台设置:

       /// <summary>
/// 简单的Forms登录
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
[HttpPost]
public ActionResult Login(Entity.T_UserModel model)
{
if (ModelState.IsValid)
{
//创建票据
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket
( , //version: 票证的版本号
model.Account, //name :与票证关联的用户名。
DateTime.Now, //
DateTime.Now.AddMinutes(), //本地日期和票证的到期的时间
true, //是否生成持久性cookie
"admin,test", //要存储在票证的特定于用户的数据。理解为角色
"/" //cookie路径
);
//加密票据,创建cookie
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(ticket));
cookie.HttpOnly = true;
HttpContext.Response.Cookies.Add(cookie); return RedirectToAction("Index", "Home", new { });
}
return View("Index");
   } /// <summary>
/// 自定义 IHttpModule
/// </summary>
public class AuthenticateHttpModule : IHttpModule
{
public void Dispose() { } public void Init(HttpApplication context)
{
context.AuthenticateRequest += new EventHandler(AuthenticateRequest);
}
private void AuthenticateRequest(object sender, EventArgs e)
{ HttpApplication app = (HttpApplication)sender;
HttpContext ctx = app.Context; //获取本次Http请求的HttpContext对象
if (ctx.User != null)
{
if (ctx.Request.IsAuthenticated == true) //验证过的一般用户才能进行角色验证
{
FormsIdentity fi = (System.Web.Security.FormsIdentity)ctx.User.Identity;
FormsAuthenticationTicket ticket = fi.Ticket; //取得身份验证票
string userData = ticket.UserData; //从UserData中恢复role信息
string[] roles = userData.Split(','); //将角色数据转成字符串数组,得到相关的角色信息
ctx.User = new GenericPrincipal(fi, roles); //这样当前用户就拥有角色信息了
}
}
}
}
Action加角色和用户验证
        /// <summary>
/// Action加角色和用户验证
/// </summary>
/// <returns></returns>
[Authorize(Roles =("admin,test"),Users ="wwj")]
public ActionResult Index()
{
return View();
}

注册 自定义 IHttpModule

<!--添加自定义 AuthenticateHttpModule type="命名空间.类名" -->
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules>
<add name="AuthenticateHttpModule" type="Web.App_Code.AuthenticateHttpModule"/>
</modules>
</system.webServer>

点击下载Demo

3、Passport 验证

的萨达速度

.Net MVC 身份验证的更多相关文章

  1. Asp.Net MVC 身份验证-Forms

    Asp.Net MVC 身份验证-Forms 在MVC中对于需要登录才可以访问的页面,只需要在对应的Controller或Action上添加特性[Authorize]就可以限制非登录用户访问该页面.那 ...

  2. MVC身份验证.MVC过滤器.MVC6关键字Task,Async.前端模拟表单验证,提交.自定义匿名集合.Edge导出到Excel.BootstrapTree树状菜单的全选和反选.bootstrap可搜索可多选可全选下拉框

    1.MVC身份验证. 有两种方式.一个是传统的所有控制器继承自定义Control,然后再里面用MVC的过滤器拦截.所以每次网站的后台被访问时.就会先走入拦截器.进行前端和后端的验证 一个是利用(MVC ...

  3. Asp.net Mvc 身份验证、异常处理、权限验证(拦截器)实现代码

    本问主要介绍asp.net的身份验证机制及asp.net MVC拦截器在项目中的运用.现在让我们来模拟一个简单的流程:用户登录>权限验证>异常处理 1.用户登录 验证用户是否登录成功步骤直 ...

  4. MVC - 身份验证

    FormsAuthenticationTicket  使用此类来为用户生成一个身份票据 持有该票据则说明该用户是通过了身份验证的用户 可以随时访问某些资源 我们先创建几个类 //用户 public c ...

  5. MVC身份验证及权限管理

    MVC自带的ActionFilter 在Asp.Net WebForm的中要做到身份认证微软为我们提供了三种方式,其中最常用的就是我们的Form认证,需要配置相应的信息.例如下面的配置信息: < ...

  6. MVC身份验证及权限管理(转载)

    from https://www.cnblogs.com/asks/p/4372783.html MVC自带的ActionFilter 在Asp.Net WebForm的中要做到身份认证微软为我们提供 ...

  7. (转) MVC身份验证及权限管理-2

    转自:http://www.cnblogs.com/ldp615/archive/2010/10/27/asp-net-mvc-forms-authentication-roles-authoriza ...

  8. jwt的ASP.NET MVC 身份验证

    Json Web Token(jwt)      一种不错的身份验证及授权方案,与 Session 相反,Jwt 将用户信息存放在 Token 的 payload 字段保存在客户端,通过 RSA 加密 ...

  9. MVC 身份验证和异常处理过滤器

    :在Global中注册为全局过滤器,应用于所有的Controller的Action 参数类均继承自ControllerContext,主要包含属性请求上下文.路由数据.结果 using FilterE ...

随机推荐

  1. django 数据模型中 null=True 和 blank=True 有什么区别

    null: If True, Django will store empty values as NULL in the database. Default is False. 如果为True,空值将 ...

  2. centos su命令

    有很多指令都只可以用 root 身份去执行,因此我们需要成为 root 用户.要这样做,我们可以使用 su 指令(更替用户).su 指令有下列格式: su - <user>或su < ...

  3. SVN怎么触发Jenkins自动构建

    通常,有几种方式可以在SVN仓库发生改变时触发Jenkins进行构建.第一种是,Jenkins主动轮询SVN仓库:第二种是,在SVN客户端(如TortoiseSVN)创建客户端hooks来触发构建:第 ...

  4. win10和ubuntu16.04双系统Geom Error

    报错信息: Geom Error Reboot and Select proper Boot device or Insert Boot Media in selected Boot device a ...

  5. java1.8新特性(四 创建 stream对象)

    java1.8 提供了 stream对象 可以用作 对 集合 数组的 一系列操作,都是基于lambda 表达式 ,所以得先熟悉lambda 表达式 集合创建stream对象 // 1.集合创建stre ...

  6. JDK类集框架实验(ArrayList,LinkedList,TreeSet,HashSet,TreeMap,HashMap)

        ArrayList import java.util.ArrayList; public class C8_3 { public static void main(String[] args) ...

  7. convert 批量文件的格式转换

    1.将 a.gif 转为 png 格式 convert a.gif a.png 请注意,convert 命令的基本格式为 convert 源文件 [参数] 目标文件 在上面的命令中,源文件是 a.gi ...

  8. L1正则化

    正则化项本质上是一种先验信息,整个最优化问题从贝叶斯观点来看是一种贝叶斯最大后验估计,其中正则化项对应后验估计中的先验信息,损失函数对应后验估计中的似然函数,两者的乘积即对应贝叶斯最大后验估计的形式, ...

  9. Linux下使用OTL操作mysql数据库

    首先重点推荐介绍otl介绍及用法的文章:http://www.cnblogs.com/fnlingnzb-learner/p/5835560.html 一.编写代码 注:以下代码来自OTL示例,略有改 ...

  10. hashlib configparser模块

    算法介绍 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常 ...