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

ASP.NET Forms 认证流程

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

Forms认证基础

  1. HTTP是无状态的协议,也就是说用户的每次请求对服务器来说都是一次全新的请求,服务器不能识别这个请求是哪个用户发送的。

  2. 那服务器如何去判断一个用户的请求呢?

  3. 答案是在每次请求发送时,附带一些其他的信息来识别用户的请求

  4. 对于Forms认证,每次的请求都携带同样的cookie信息,将此信息发送给服务器,这样服务器就可以识别这个请求到底是哪个用户的。


ASP.NET Forms 认证基础

  1. ASP.NET Request.IsAuthenticated为true 代表此用户已经登陆

  2. 使用 HttpContext.User 来表用用户的信息


ASP.NET Forms 认证过程

  1. ASP.NET 检查当前的请求,并根据Web.config中配置的认证方式去构造HttpContext.User 供后续处理

  2. 后续可以通过判断HttpContext.User 信息来识别用户信息


ASP.NET Forms 登陆与注销

  1. 使用vs2017 新建一个MVC程序,不进行身份验证

  2. 在Web.config 的system.web 配置节新增Forms认证信息,内容如下

    <authentication mode="Forms" >
      <forms cookieless="UseCookies" name="FormsCookie" loginUrl="~/Home/Index.cshtml"></forms>
    </authentication>
  1. 我们使用 Request.IsAuthenticated 来判断用户是否登陆,我们来做一个登陆页面
<div>
    <fieldset>
        <legend>用户登陆</legend>
        <form action="/Home/Login" method="post">
            用户名:<input type="text" name="loginName" style="width:200px;" />
            密  码:<input type="password" name="loginPwd" style="width:200px" />
                    <input type="submit" value="登录" />
        </form>
    </fieldset>
</div>
  1. 后台验证密码成功后跳转到欢迎的页面
        public ActionResult Login(string loginName,string loginPwd)
        {
            if (string.IsNullOrEmpty(loginName) || string.IsNullOrEmpty(loginPwd))
                return Redirect("Index");
            if (loginName == "Admin" && loginPwd == "Admin")
            {
                FormsAuthentication.SetAuthCookie(loginName, true);
                return RedirectToAction("Index", "Welcome");
            }
            else
            {
                return Redirect("Index");
            }
        }
  1. 在欢迎页面如果已登录显示用户名,如果未登录显示登录地址进行登录
<div>
    <fieldset>
        <legend>
            欢迎
        </legend>
        @if (Request.IsAuthenticated)
        {
            @: 你好 @Context.User.Identity.Name
        }
        else
        {
            <div>
                还未登录,请进行 <a href="/Home/Index">登录</a>
            </div>
        }</fieldset>
</div>

总结

可以看到我们在验证完用户名和密码后,只是调用了 FormsAuthentication.SetAuthCookie(loginName, true); 执行完之后ASP.NET 就可以识别此用户后续的请求。这个方法帮我们做了如下流程:
用户登录流程

  1. 根据用户名创建一个FormsAuthenticationTicket对象

  2. 调用FormsAuthenticatin.Encrypt() 进行加密

  3. 根据加密结果创建名称为 FormsCookie (来自Web.config中的配置) 的cookie

  4. 将此cookie 写入Response 返回给浏览器

  5. 浏览器在进行后续请求时会携带此cookie到服务端。

每次请求时的认证流程

  1. 浏览器在发送请求时携带cookie信息

  2. FormsAuthenticationModule 读取cookie

  3. 从cookie中解析出FormsAuthenticationTicket 对象,过期的对象将被忽略

  4. 根据FormsAuthenticationTicket 对象构造 FormsIdentity对象并设置HttpContext.User

  5. ASP.NET 程序后续 HttpContext.User来判断用户信息

到此我们已经完成正整个认证流程。


更多详细内容请参见大神 Fish Li (李奇峰)


鲜花

握手

雷人

路过

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

请发表评论

全部评论

专题导读
上一篇:
asp.net获取URL和IP地址发布时间:2022-07-10
下一篇:
asp.net与数据库操作发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

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

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

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