C#.NET使用isAuthenticated
我使用MVC格式来创建一个网站。 现在它所做的只是从SQL服务器管理用户。 我现在要做的是让用户登录然后能够管理用户。 从登录页面,它应该转到帐户的索引,但我只希望经过身份validation的用户可以查看此页面。 如果我:它工作正常:
1)将控制器中的函数设置为[AllowAnonymous](这不是我想要的)
2)允许Windows身份validation(这不是我想要的,因为一旦我部署,它将在网络上)
它实际上只是归结为如何validation用户,然后保持该身份validation。
这是登录页面:
@model myWebsite.Models.LoginModel @{ ViewBag.Title = "Login"; ViewBag.ReturnUrl = "Index"; } Login
@using (Html.BeginForm("Login", "Login", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" })) { @Html.AntiForgeryToken() Login
@Html.ValidationSummary(true, "", new { @class = "text-danger"}) @Html.LabelFor(Model => Model.UserName, new { @class = "control-label col-md-2"}) @Html.TextBoxFor(Model => Model.UserName, new { @class = "col-md-2 control-label"}) @Html.ValidationMessageFor(Model => Model.UserName, "" , new { @class = "text-danger"}) @Html.LabelFor(Model => Model.Password, new { @class = "control-label col-md-2"}) @Html.TextBoxFor(Model => Model.Password, new { @class = "col-md-2 control-label"}) @Html.ValidationMessageFor(Model => Model.Password, "" , new { @class = "text-danger"}) }
这是每个页面的部分部分
@using Microsoft.AspNet.Identity; @if (Request.IsAuthenticated) { using (Html.BeginForm("LogOff", "Account", FormMethod.Post, new { id = "logoutForm", @class = "navbar-right" })) { @Html.AntiForgeryToken()
} } else { }
这是控制器
[AllowAnonymous] // GET: Login public ActionResult Login() { return View(); } [AllowAnonymous] // GET: Login public ActionResult Login() { return View(); } [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public ActionResult Login(LoginModel model, string retunUrl) { /* if (!ModelState.IsValid) { Console.WriteLine("IS NOT VALID"); return View(model); } */ String UserName = model.UserName; String Password = model.Password; LoginContext LC = new LoginContext(); LoginModel ValidUser = LC.UserList.Single(Person => Person.UserName == UserName && Person.Password == Password); if (ValidUser != null) { return Redirect("Index"); } return View(model); } // GET: Login Index of users [AllowAnonymous] public ActionResult Index() { return View(db.UserList.ToList()); }
The Old Way™
如果您只关心用户为您提供有效凭据的事实,那么您最简单的选项可能是FormsAuthentication:
FormsAuthentication.SetAuthCookie(model.UserName, false);
和
FormsAuthentication.SignOut();
这些要求FormsAuthentication模块处于活动状态,因此您可以在web.config中查找这样的行:
并删除它,并添加或更新身份validation部分:
通过这些设置,ASP.NET知道从FormsAuthentication.SetAuthCookie
生成的cookie中构建Identity和Principle。
Right(ish)Way™
话虽这么说,FormsAuthentication在这一点上并不是推荐的路径,因为它依赖于System.Web,而且它不是声明感知的事实。
您可以使用确实产生声明感知身份的OWIN来完成最小设置。 如果您使用较新的ASP.NET项目模板,那么您应该在App_Start文件夹中有一个Startup.Auth.cs文件,或者您可以添加一个。 使用OWIN进行基于cookie的身份validation的最小代码是:
using Microsoft.AspNet.Identity; using Microsoft.Owin; using Microsoft.Owin.Security; using Microsoft.Owin.Security.Cookies; using Owin; public partial class Startup { public void ConfigureAuth(IAppBuilder app) { app.UseCookieAuthentication(new CookieAuthenticationOptions { LoginPath = new PathString("/account/login"), LogoutPath = new PathString("/account/logout"), CookieName = ".YOUR_COOKIE_NAME_HERE", SlidingExpiration = true, AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, AuthenticationMode = AuthenticationMode.Active }); } }
然后,当您对用户进行身份validation时,您会执行以下操作:
var claims = new List(); claims.Add(new Claim(ClaimTypes.Name, model.UserName)); var identity = new ClaimsIdentity(claims, DefaultAuthenticationTypes.ApplicationCookie); HttpContext.Current.Request.GetOwinContext().Authentication.SignIn(identity);
并退出:
HttpContext.Current.Request.GetOwinContext().Authentication.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
您还需要在Global.asax文件中设置以下值:
using System.Web.Helpers; using System.Security.Claims; public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { // ... your other startup/registration code ... AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.Name; } }
Request.IsAuthenticated
只检查当前请求上下文中是否已建立非匿名身份,因此上述任一选项都可以。
暂且不说: 你真的不应该用纯文本存储密码。 创建用户记录时,使用Crypto.HashPassword
创建密码的盐渍哈希值,然后存储密码,然后在检查用户是否输入正确的密码时使用Crypto.VerifyHashedPassword
。 您可以在此处找到加密文档 。
上述就是C#学习教程:C#.NET使用isAuthenticated分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1009181.html