ASP.NET Core 9.0 Identity 是微软提供的用户身份管理框架,在blazor编程中应用非常简洁高效。最近在为凤凰科技https://www.ic-phoenix.com改造一个内部老旧asp项目中身份验证部分需要更新到core 9.0系统下,所以只要基本验证功能就可以了,太冗杂的内容对项目都是多余。况且众所周知,微软的东西一项全面而复杂。官方文档往往需要强大的实践背景才能读懂。那在简单功能系统中,往往只需要关注快速高效的部署的部分就可以了。应用中只搭取最主要的功能就可以达到自己的目的。那如何做到快速部署,代码简洁高效呢。看了很多文档才搞定。分享出来希望有相同需求的朋友可以少走一点弯路。
Identity主要实现的核心功能模块有很多如下:
用户体系管理
内置用户模型支持字段扩展
密码哈希存储与验证
双因素认证集成
外部登录提供程序(OAuth/OpenID Connect)
角色权限系统
基于角色的访问控制(RBAC)
声明式权限管理
策略驱动的授权体系
系统用到了部分功能,在program.cs里添加服务,为了方便管理我们启用登陆管理者signinmanager,代码如下:
builder.Services.AddIdentityCore<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddSignInManager()
.AddDefaultTokenProviders();
接下来配置option:
builder.Services.Configure<IdentityOptions>(options =>
{
options.Password.RequireDigit = true;
options.Password.RequireLowercase = true;
options.Password.RequireUppercase = false; //必须包含大写字符
options.Password.RequireNonAlphanumeric = false;//指示密码是否必须包含非字母数字字符
options.User.AllowedUserNameCharacters =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+";
});
blazor引用的时候需要声明一下
@using Microsoft.AspNetCore.Authorization
@using Microsoft.EntityFrameworkCore
@using Microsoft.AspNetCore.Identity
接着注入anthenticationstateprovider:
@inject AuthenticationStateProvider AuthenticationStateProvider
在需要验证的位置OnInitializedAsync里调用
var authState = await AuthenticationStateProvider
.GetAuthenticationStateAsync();
var user = authState.User;
if (user.Identity is not null && user.Identity.IsAuthenticated)
{
//这里获取user授权策略
}
需要注意的是,user账号需要认证和授权,以后有机会我再来介绍一下如何简单的做授权。

1477

被折叠的 条评论
为什么被折叠?



