CORE MVC 自定义认证

微软的认证体系,集成了EF,和它的表结构,对于我们已有的系统,或者想高度自定义的人,该怎么办呢?

答案在: https://docs.microsoft.com/en-us/aspnet/core/security/authentication/cookie?view=aspnetcore-2.1&tabs=aspnetcore2x

具体要点:

1)Startup.ConfigureServices中:

1 services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
2     .AddCookie();

 

2)Startup.Configure中:

            app.UseStaticFiles();
            app.UseCookiePolicy();
            app.UseAuthentication();

 

3)登录成功后,调用这个方法:

 1         private async Task LoginSuccess(string userName )
 2         {
 3             var claims = new List<Claim>
 4             {
 5                 new Claim(ClaimTypes.Name, userName),
 6                 new Claim("FullName", "Test User"),
 7                 new Claim(ClaimTypes.Role, "Administrator"),
 8             };
 9 
10             var claimsIdentity = new ClaimsIdentity(
11                 claims, CookieAuthenticationDefaults.AuthenticationScheme);
12 
13             var authProperties = new AuthenticationProperties { };
14 
15             await HttpContext.SignInAsync(
16                 CookieAuthenticationDefaults.AuthenticationScheme,
17                 new ClaimsPrincipal(claimsIdentity),
18                 authProperties);
19         }

以上代码 core mvc 2.1下测试用过。

4)这样,在需要登录才能访问的地方加上:

1     [Authorize]
2     public class HomeController : Controller

5)取用户名

<h2>@this.Context.User.Identity.Name</h2>

 

转载于:https://www.cnblogs.com/ybst/p/9242334.html

在 ASP.NET Core 8 中(实际上是 .NET Core 6+),如果你想要自定义认证过程,可以利用 `IAuthorizationFilter` 和 `OnAuthorization` 方法。这个接口允许你在每个 HTTP 请求经过身份验证之前执行一些预处理逻辑,比如验证、授权或记录日志。 首先,你需要创建一个实现了 `IAuthorizationFilter` 的类,例如: ```csharp using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.AspNetCore.Authorization; public class CustomAuthorizationFilter : IAuthorizationFilter { public async Task OnAuthorization(AuthorizationFilterContext filterContext) { // 这里你可以访问当前的HttpContext,获取用户信息和其他必要的数据 var userId = filterContext.HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier); // 检查用户是否已登录或满足其他认证条件 if (userId == null || !IsUserAuthenticated(userId)) // 假设IsUserAuthenticated是你定义的函数 { // 用户未通过认证,设置未经授权结果 await filterContextChallenge(filterContext, "Bearer"); // 假设使用Bearer令牌认证 return; } // 接下来对用户进行更详细的授权检查,例如: if (!await HasPermission(filterContext.User, "admin")) // 假设HasPermission是你定义的函数 { filterContext.Result = ForbidAsync(); // 如果没有权限,则返回拒绝访问 return; } // 认证和授权都成功,请求可以继续执行 await filterContext.Next(); } private Task<bool> IsUserAuthenticated(string userId) => /* ... */; // 用户认证逻辑 private Task<bool> HasPermission(User user, string permission) => /* ... */; // 权限检查逻辑 private void filterContextChallenge(AuthorizationFilterContext filterContext, string scheme) => filterContext.Challenge(scheme); } ``` 然后,在需要实施自定义认证的地方,如控制器或API行动方法上应用这个过滤器: ```csharp [Authorize] // 默认的认证策略 [Route("api/[controller]")] [ApiController] public class YourController : ControllerBase { [CustomAuthorizationFilter] [HttpGet("{id}")] public async Task<ActionResult<string>> Get(int id) { // 接口的具体业务逻辑 } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值