.NET 8中AddIdentity与AddIdentityCore适配及令牌提供者问题
.NET 8 Identity 升级问题:AddIdentity 弃用与令牌提供者配置解决方案
核心差异说明
AddIdentity<TUser, TRole>属于Microsoft.AspNetCore.Identity包,该包在.NET 6+被标记为弃用,但.NET 6项目无需显式导入即可使用,原因是Microsoft.AspNetCore.Identity.EntityFrameworkCore在.NET 6版本中默认依赖它,间接引入了相关方法与命名空间。AddIdentityCore<TUser>是Microsoft.Extensions.Identity.Core提供的轻量级扩展,仅包含核心身份验证基础能力,角色管理、令牌提供者等功能需手动通过链式调用补充。
解决方案
1. 兼容式恢复使用 AddIdentity
尽管Microsoft.AspNetCore.Identity被标记为弃用,.NET 8仍完全支持该包,只需显式安装:
Install-Package Microsoft.AspNetCore.Identity -Version 8.0.0
安装后即可沿用原有代码:
services.AddIdentity<CustomUser, IdentityRole>() .AddEntityFrameworkStores<CustomDbContext>() .AddDefaultTokenProviders();
2. 基于 AddIdentityCore 手动配置令牌提供者
若不想依赖弃用包,可按以下步骤配置:
- 安装令牌提供者依赖包:
Install-Package Microsoft.AspNetCore.Identity.DataProtection -Version 8.0.0
- 手动添加所需令牌提供者,替代
AddDefaultTokenProviders():
using Microsoft.AspNetCore.Identity; // ... services.AddIdentityCore<CustomUser>() .AddRoles<IdentityRole>() .AddEntityFrameworkStores<CustomDbContext>() // 添加默认数据保护令牌提供者 .AddTokenProvider<DataProtectorTokenProvider<CustomUser>>(TokenOptions.DefaultProvider) // 可选:添加邮件/短信令牌提供者(按需启用) .AddTokenProvider<EmailTokenProvider<CustomUser>>(TokenOptions.DefaultEmailProvider) .AddTokenProvider<PhoneNumberTokenProvider<CustomUser>>(TokenOptions.DefaultPhoneProvider);
3. 解决 DataProtectorTokenProvider 无法解析问题
该类位于Microsoft.AspNetCore.Identity命名空间,需满足两个条件:
- 已安装
Microsoft.AspNetCore.Identity.DataProtection包(.NET 8中该类从原Microsoft.AspNetCore.Identity包拆分至此) - 代码文件顶部导入
using Microsoft.AspNetCore.Identity;
内容的提问来源于stack exchange,提问作者kolev9605
相关产品推荐
相关产品推荐

