189 8069 5689

asp.netcoreweb页面验证

本例是用简单角色验证方式来通过用户登录后,获取用户角色,每种角色可以通过[Authorize(Roles = "admin,user")]在Action上来控制访问的权限,也就是说,只有属性这个角色才能访问这个Action。

道先添加Microsoft.AspNetCore.Authentication.Cookies引用

创新互联建站自成立以来,一直致力于为企业提供从网站策划、网站设计、网站制作、做网站、电子商务、网站推广、网站优化到为企业提供个性化软件开发等基于互联网的全面整合营销服务。公司拥有丰富的网站建设和互联网应用系统开发管理经验、成熟的应用系统解决方案、优秀的网站开发工程师团队及专业的网站设计师团队。

在StartUp.cs的Configure方法中添加
//为验证添加中间件
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    //验证方案名称
    AuthenticationScheme = "loginvalidate",
    //没有权限时导航的登录action
    LoginPath = new Microsoft.AspNetCore.Http.PathString("/login"),
    //访问被拒绝后的acion
    AccessDeniedPath = new Microsoft.AspNetCore.Http.PathString("/Home/NoPermission"),      
    AutomaticAuthenticate = true,
    AutomaticChallenge = true,
    SlidingExpiration = true
});

 

HomeController中的登录的action实现

using System.Collections.Generic;
using System.Linq;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Authorization;
using System.Security.Claims;
 
namespace webAuth.Controllers
{
    /// 
    /// 本Controller允许admin和user两种角色可以访问
    /// 
    [Authorize(Roles = "admin,user")]
    public class HomeController : Controller
    {
        public IActionResult Index()
        {
            return View();
        }
        /// 
        /// aobout只允许user角色访问
        /// 
        /// 
        [Authorize(Roles = "user")]
        public IActionResult About()
        {
            var id = User.Claims.SingleOrDefault(c => c.Type == ClaimTypes.Sid).Value;
            ViewData["Message"] = "UserID:"+ id;
 
            return View();
        }
        /// 
        /// contact只允许admin角色访问
        /// 
        /// 
        [Authorize(Roles = "admin")]
        public IActionResult Contact()
        {
            var id=User.Claims.SingleOrDefault(c => c.Type == ClaimTypes.Sid).Value;
            ViewData["Message"] = "UserID:"+ id;
 
            return View();
        }
 
        public IActionResult NoPermission()
        {
            return View();
        }
 
        /// 
        /// 允许所有登录者
        /// 
        /// 如果用户访问的不是登录页,returnUrl将把这个url传进来,待登录成功后返回这个地址
        /// 
        [AllowAnonymous]
        [HttpGet("login")]
        public IActionResult Login(string returnUrl)
        {
            //判断是否验证
            if (!HttpContext.User.Identity.IsAuthenticated)
            {
                //把返回地址保存在前台的hide表单中
                ViewBag.returnUrl = returnUrl;
            }
            ViewBag.error = null;
            return View();
        }
        /// 
        /// 允许所有登录者
        /// 
        /// 用户名
        /// 密码
        /// 返回u
        /// 
        [AllowAnonymous]
        [HttpPost("login")]
        public IActionResult Login(string username, string password, string returnUrl)
        {
            //从数据库验证用户,关取出用户所需要信息
            var users = new List() {
                new { ID = 1, UserName = "zsf",Password="111", Name = "张三丰", RoleTypeID = 1, RoleType = "admin", RoleTypeName = "管理员" },
                 new { ID = 2, UserName = "zwj",Password="222", Name = "张无忌", RoleTypeID = 2, RoleType = "user", RoleTypeName = "普通用户" }
            };
            var user = users.SingleOrDefault(u => u.UserName == username && u.Password == password);
            if (user!=null)
            {
                //登录成功后,设置声明
                var claims = new Claim[] {
                      new Claim(ClaimTypes.UserData,username),
                      new Claim(ClaimTypes.Role,user.RoleType),
                      new Claim(ClaimTypes.Name,user.Name),
                      new Claim(ClaimTypes.Sid,user.ID.ToString())
                };
                HttpContext.Authentication.SignInAsync("loginvalidate", new ClaimsPrincipal(new ClaimsIdentity(claims, "Cookie")));
                HttpContext.User = new ClaimsPrincipal(new ClaimsIdentity(claims));
                return new RedirectResult(returnUrl == null ? "/" : returnUrl);
            }
            else
            {
                ViewBag.error = "用户名或密码错误!";
                return View();
            }
        }
    }
}

 

Login.cshtml页面如下:

@{
    Layout = null;
}



    
    
    登录
    
    


    
        
            
                
                    
                        用户名
                        
                    
                
            
                                                                           密码                                                                                                                                                                                 登录                                                                @if (ViewBag.error != null)             {                 @ViewBag.error             }                        

如果在其他页面使用User,可以像下面这样使用

当前用户:@User.Identity.Name

当然也可以从User中查到其他登录时存储的Claim的值

 

登录成功后

asp.net core web页面验证                            

登录成功后访问没有权限页面(当然可以不让这种角色看到不能访问的链接)

asp.net core web页面验证


当前题目:asp.netcoreweb页面验证
本文网址:http://cdxtjz.cn/article/phosop.html

联系我们

您好HELLO!
感谢您来到成都网站建设公司,若您有合作意向,请您为我们留言或使用以下方式联系我们, 我们将尽快给你回复,并为您提供真诚的设计服务,谢谢。
  • 电话:028- 86922220 18980695689
  • 商务合作邮箱:631063699@qq.com
  • 合作QQ: 532337155
  • 成都网站设计地址:成都市青羊区锣锅巷31号五金站写字楼6楼

小谭建站工作室

成都小谭网站建设公司拥有多年以上互联网从业经验的团队,始终保持务实的风格,以"帮助客户成功"为已任,专注于提供对客户有价值的服务。 我们已为众企业及上市公司提供专业的网站建设服务。我们不只是一家网站建设的网络公司;我们对营销、技术、管理都有自己独特见解,小谭建站采取“创意+综合+营销”一体化的方式为您提供更专业的服务!

小谭观点

相对传统的成都网站建设公司而言,小谭是互联网中的网站品牌策划,我们精于企业品牌与互联网相结合的整体战略服务。
我们始终认为,网站必须注入企业基因,真正使网站成为企业vi的一部分,让整个网站品牌策划体系变的深入而持久。