基于ASP.NET Core Identity的IdentityServer4注册与登录问题咨询
问题排查与解决方案
嘿,我来帮你逐个解决这些IdentityServer4结合ASP.NET Core Identity起步阶段的常见坑:
1. 注册页面空白、无Register相关文件/路由
这个问题的核心是你没有生成ASP.NET Core Identity的UI脚手架文件。官方对应.NET Core 2.0的release分支不会自动包含这些UI页面,需要手动生成:
- 打开命令行,切换到你的IdentityServer项目根目录,执行以下命令生成Identity UI:
执行过程中会提示你选择要生成的页面,记得勾选Register相关选项。dotnet aspnet-codegenerator identity -dc ApplicationDbContext - 生成完成后,检查Startup.cs里的配置:确保在
app.UseAuthentication();之后添加了Razor Pages的路由映射:
这样Register页面的路由就能正常访问了。app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); // 其他路由配置... });
2. 执行dotnet ef后找不到数据库
这大概率是连接字符串配置不对或者命令执行路径有误:
- 检查
appsettings.json里的ConnectionStrings节点:- 如果用LocalDb,默认连接字符串应该是:
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=IdentityServer4Quickstart;Trusted_Connection=True;MultipleActiveResultSets=true" - 如果用SQL Express,改成:
"DefaultConnection": "Server=.\\SQLEXPRESS;Database=IdentityServer4Quickstart;Trusted_Connection=True;MultipleActiveResultSets=true"
- 如果用LocalDb,默认连接字符串应该是:
- 确保你是在IdentityServer项目目录下执行
dotnet ef migrations add InitialCreate和dotnet ef database update命令,而不是MvcClient项目。 - 打开SQL Server Management Studio,连接对应的数据库实例(LocalDb或SQL Express),刷新数据库列表,看看是否生成了目标数据库。如果没生成,检查命令执行时的输出日志,排查权限或实例不存在的问题。
3. alice/bob账号登录失败、日志显示无内存用户
这是正常现象!当你集成ASP.NET Core Identity之后,IdentityServer4默认会禁用内存测试用户,转而使用数据库中的用户:
- 如果你只是想临时测试,可以手动启用内存用户:在Startup.cs的
ConfigureServices方法中,找到AddIdentityServer()的配置,添加.AddTestUsers(TestUsers.Users),同时需要安装IdentityServer4.TestNuGet包。不过这个只适合测试,生产环境绝对不能用。 - 正确的做法是:先解决第一个注册页面的问题,创建一个属于你自己的用户账号,然后用这个账号登录,而不是依赖alice/bob这些内存测试用户。
内容的提问来源于stack exchange,提问作者VBAHole




