• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Asp.NetMVC身份认证

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

Asp.Net MVC 登录验证:

1. Windows身份认证,主要用于Intranet上域环境。使用Windows验证时,用户的Windows安全令牌在用户访问整个网站期间使用HTTP请求,进行消息发送。应用程序会使用这个令牌在本地(或者域)里验证用户账号的有效性,也会评估用户所在角色所具备的权限。当用户验证失败或者未授权时,浏览器就会定向到特定的页面让用户输入自己的安全凭证(用户名和密码)。

    Windows身份认证的局限性非常明显,一旦用户有超出本地域控制器范围的外网用户访问网站,就会出现问题

2. Forms身份认证,应用于Internet。ASP.NET需要验证加密的HTTP cookie或者查询字符串来识别用户的所有请求。cookie与ASP.NET会话机制(session)的关系密切,在会话超时或者用户关闭浏览器之后,会话和cookie就会失效,用户需要重新登录网站建立新的会话。

3. ASP.NET Identity - Claims-based(基于声明)的身份认证:   对比Windows认证和Forms身份认证,claims-based认证这种方式将认证和授权与登录代码分开,将认证和授权拆分成另外的web服务。类似于使用的是第三方的登录系统,如微信登录。

 

使用Forms身份验证流程:

一. 配置:

<authentication mode="Forms"> 
  <forms loginUrl="~/Account/Login" timeout="2000"> 
  </forms> 
</authentication> 

 

二、用户登录

  1、用户名密码验证。

  2、验证成功,取出部分必要的用户信息usedata,序列化成string.

       3. 创建FormsAuthenticationTicket 票据,将usedata放入其中。

        public void SetCookie(string source)
        {

            var ticket = new FormsAuthenticationTicket(1, "loginuser", DateTime.Now, DateTime.Now.AddDays(10), false, source);

            string authTicket = FormsAuthentication.Encrypt(ticket);

            HttpCookie cookie = new HttpCookie("hanApp", authTicket);

            Response.Cookies.Remove(cookie.Name);
            Response.Cookies.Add(cookie);

            //HttpCookie signCookie = new HttpCookie("hanApp_sign", "1  ");

            //Response.Cookies.Remove(signCookie.Name);
            //Response.Cookies.Add(signCookie);
        }

       4. 调用FormsAuthentication.Encrypt对票据信息进行加密。

       5. 创建HttpCookie,并通过Response.Cookies.Add将cookie发回到前端。

  6. Redirect跳转到登录前的页面。

 

 三. 一般验证:

       1. 对于一般的controller和action,可以有直接使用Authorize Attribute,那么访问他们之前会自动验证是否登录。

       2. 我们也可以自定义一个attribute来实现这个逻辑,只要这个attribute继承AuthorizeAttribute, 或者自己继承ActionFilterAttribute并重写OnActionExecuting方法,即可。

       3. 我们可以在全局增加验证操作,就不需要在每个controller上增加这个attribute. 如下:

        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new HandleErrorAttribute());
            filters.Add(new AuthorizeAttribute());
            filters.Add(new ActionExceptionAttribute());
        }

 

       3. 对于部分不需要进行 验证的action,可以使用AllowAnonymous attribute。

[AllowAnonymous]
public ActionResult Login(s)
{
.....
return View();
}

 

 

Claims-based(基于声明)的身份认证,

先来看一下代码,直观感受一下,如何使用Claims-based(基于声明)的身份认证:

private IAuthenticationManager AuthenticationManager
{
get { return HttpContext.GetOwinContext().Authentication; }
}
 
private async Task SignInAsync()
{
// 1. 利用ASP.NET Identity获取用户对象
var user = await UserManager.FindAsync("UserName", "Password");
// 2. 利用ASP.NET Identity获取identity 对象
ClaimsIdentity identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
// 3. 结合OWIN,引用  Microsoft.Owin.Security命名空间,实现IIS与web应用的解耦
AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = true }, identity);
} 

下面这篇文章介绍了如何使用第三方的应用进进登录:http://www.cnblogs.com/clark159/p/5195673.html?utm_source=tuicool&utm_medium=referral


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap