Asp.Net Core 鉴权与授权
Setup.cs
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
//设置登录界面和无权限界面
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(CookieAuthenticationDefaults.AuthenticationScheme,options=>
{
options.LoginPath = "/Home/Index";
options.AccessDeniedPath = "/Home/Privacy";
});
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseRouting();
//添加这两个中间件
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
}
Controller中这么使用
//调用此方法后登录成功,给浏览器添加Cookie
public async Task<IActionResult> Login()
{
//假设用户名密码正确
var a = new ClaimsIdentity("abc");
a.AddClaim(new Claim(ClaimTypes.Name, "baozi"));
a.AddClaim(new Claim(ClaimTypes.Role, "admin"));
a.AddClaim(new Claim(ClaimTypes.MobilePhone, "13912345678"));
await base.HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(a),
new AuthenticationProperties { ExpiresUtc = DateTime.Now.AddMinutes(30) });
return new JsonResult(new { Result = true, Message = "登录成功" });
}
public async Task<IActionResult> Logout()
{
await base.HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
return new JsonResult(new { Result = true, Message = "退出成功" });
}
[Authorize(Roles = "people")]
public async Task<IActionResult> DoPeople()
{
var result = await base.HttpContext.AuthenticateAsync(CookieAuthenticationDefaults.AuthenticationScheme);
return new JsonResult(new { Result = true, Message = "DoPeople" });
}
[Authorize(Roles = "admin")]
public async Task<IActionResult> DoAdmin()
{
var result = await base.HttpContext.AuthenticateAsync(CookieAuthenticationDefaults.AuthenticationScheme);
return new JsonResult(new { Result = true, Message = "DoAdmin" });
}