温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

.net core权限认证

发布时间:2020-06-22 16:47:04 来源:网络 阅读:3139 作者:志强1224 栏目:编程语言

在Startup类中添加授权和验证的注入对象和中间件

1.在ConfigureServices方法注入对象

//验证注入
services.AddAuthentication
	(
	opts=>opts.DefaultScheme= Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationDefaults.AuthenticationScheme
	).AddCookie(
	Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationDefaults.AuthenticationScheme ,
	opt => {
		opt.LoginPath = new Microsoft.AspNetCore.Http.PathString("/login");
		opt.AccessDeniedPath= new Microsoft.AspNetCore.Http.PathString("/home/error");
		opt.LogoutPath= new Microsoft.AspNetCore.Http.PathString("/login");
		opt.Cookie.Path = "/";
	} );

2.在Configure方法中添加中间件

//开启验证中间件
app.UseAuthentication();

在特效下去授权controller和action

[Authorize(Roles ="admin")]//允许那些角色访问
[AllowAnonymous]//允许所有人访问

登录方法

        [HttpGet("login")]
        [AllowAnonymous]//允许所有人访问
        public IActionResult Login( string returnUrl) {
            //没有通过验证
            if ( ! HttpContext.User.Identity.IsAuthenticated) {
                ViewBag.returnUrl = returnUrl;
            }
            return View();
        }

登录实现功能方法

[HttpPost("login")]
[AllowAnonymous]//允许所有人访问
public IActionResult Login(string NET_User, string PassWord ,string returnUrl) {
	if (NET_User == "123" && PassWord == "123") {
		var claims = new System.Security.Claims.Claim[] {
			new System.Security.Claims.Claim(System.Security.Claims.ClaimTypes.Role,"admin"),
			//User.Identity.Name
			new System.Security.Claims.Claim(System.Security.Claims.ClaimTypes.Name,"NAME"),
		};
		HttpContext.SignInAsync(
			Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationDefaults.AuthenticationScheme,
			new System.Security.Claims.ClaimsPrincipal(new System.Security.Claims.ClaimsIdentity(claims))
			);
		return new RedirectResult(string.IsNullOrEmpty(returnUrl) ? "/home/index":returnUrl);
	} else {
		ViewBag.error = "用户名或密码错误";
		return View();
	}

}

前台页面

<form method="post" action="login" class="am-form">
	<label for="email">邮箱/用户名/手机号:</label>
	<input type="text" name="NET_User" value="">
	<br>
	<label for="password">登录密码:</label>
	<input type="password" name="PassWord" value="">
	<input type="hidden" name="returnUrl" value="@ViewBag.returnUrl">
	<br>
	<span style="color:red">@ViewBag.error</span>
	<br>
	<label for="remember-me">
		<input id="remember-me" type="checkbox">
		记住密码
	</label>
	<br />
	<div class="am-cf">
		<input type="submit" name="" value="登 录" class="am-btn am-btn-primary am-btn-sm am-fl">
		<input type="submit" name="" value="忘记密码 ^_^? " class="am-btn am-btn-default am-btn-sm am-fr">
	</div>
</form>


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI