IdentityServer4 无法使用自定义用户存储添加 asp 网络核心身份
IdentityServer4 can't add asp net core identity with custom user store
我正在尝试将我的自定义 IUserStore 实现与 IdentityServer4 + Asp Net Core Identity 一起使用,我遵循的步骤是在删除 EntityFramework 后创建新的 'IdentityServer with Asp Net Core Identity' aka is4aspid 模板资产然后我的配置服务看起来像
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddScoped<IIdentityUserRepository<ApplicationUser>, IdentityUserRepository>(); //<-- Repository that I used on CustomUserStore
services.AddDefaultIdentity<ApplicationUser>()
.AddUserStore<CustomUserStore<ApplicationUser>>() //<-- Add
.AddDefaultTokenProviders();
var builder = services.AddIdentityServer(options =>
{
options.Events.RaiseErrorEvents = true;
options.Events.RaiseInformationEvents = true;
options.Events.RaiseFailureEvents = true;
options.Events.RaiseSuccessEvents = true;
// see https://identityserver4.readthedocs.io/en/latest/topics/resources.html
options.EmitStaticAudienceClaim = true;
})
.AddInMemoryIdentityResources(Config.IdentityResources)
.AddInMemoryApiScopes(Config.ApiScopes)
.AddInMemoryClients(Config.Clients)
.AddAspNetIdentity<ApplicationUser>();
}
自定义用户存储看起来像
public class CustomUserStore<TUser> :
IUserStore<TUser>,
IUserLoginStore<TUser>,
IUserRoleStore<TUser>,
IUserClaimStore<TUser>,
IUserPasswordStore<TUser>,
IUserSecurityStampStore<TUser>,
IUserEmailStore<TUser>,
IUserLockoutStore<TUser>,
IUserPhoneNumberStore<TUser>
where TUser : ApplicationUser
{
private readonly IIdentityUserRepository<TUser> _userRepository;
public CustomUserStore(IIdentityUserRepository<TUser> userRepository)
{
_userRepository = userRepository;
} //rest of the code hidden sake of brevity
自定义用户存储与默认 Asp Net Core 身份模板配合良好,但在 is4aspid 模板中,当我尝试摆脱 Entity Framework 并放置我的自定义存储实现时,登录页面 returns 当我尝试访问受保护的资源时出现 404 消息,但除此之外,主页工作正常,没有错误消息或下面的日志消息
[13:03:04 Information] Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationHandler
AuthenticationScheme: Identity.Application was challenged.
此外,当发生这些事情时,不会调用控制器或 CustomUserStore
我使用的文档
Custom storage providers for ASP.NET Core Identity
IdentityServer4 Using ASP.NET Core Identity
编辑:ApplicationUser class 也是自定义实现,没有任何继承者,不像默认 ApplicationUser : IdentityUser
模板本身
我使用这样的代码将我自己的商店添加到 IdentityServer:
services.AddDbContext<ApplicationDbContext>(options =>
{
options.UseSqlServer(_configuration["ConnectionString"]);
});
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
问题出在 AddDefaultIdentity
本身,因为它不仅添加了 Identity 组件,还包含了很多东西 UI 我认为问题是因为 UI 组件与 [=10] 一起添加的=] 所以当我尝试使用项目的视图时它混淆了框架,解决方案是使用 AddIdentity
而不是 AddDefaultIdentity
所以这解决了问题,现在系统工作无缝。
我正在尝试将我的自定义 IUserStore 实现与 IdentityServer4 + Asp Net Core Identity 一起使用,我遵循的步骤是在删除 EntityFramework 后创建新的 'IdentityServer with Asp Net Core Identity' aka is4aspid 模板资产然后我的配置服务看起来像
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddScoped<IIdentityUserRepository<ApplicationUser>, IdentityUserRepository>(); //<-- Repository that I used on CustomUserStore
services.AddDefaultIdentity<ApplicationUser>()
.AddUserStore<CustomUserStore<ApplicationUser>>() //<-- Add
.AddDefaultTokenProviders();
var builder = services.AddIdentityServer(options =>
{
options.Events.RaiseErrorEvents = true;
options.Events.RaiseInformationEvents = true;
options.Events.RaiseFailureEvents = true;
options.Events.RaiseSuccessEvents = true;
// see https://identityserver4.readthedocs.io/en/latest/topics/resources.html
options.EmitStaticAudienceClaim = true;
})
.AddInMemoryIdentityResources(Config.IdentityResources)
.AddInMemoryApiScopes(Config.ApiScopes)
.AddInMemoryClients(Config.Clients)
.AddAspNetIdentity<ApplicationUser>();
}
自定义用户存储看起来像
public class CustomUserStore<TUser> :
IUserStore<TUser>,
IUserLoginStore<TUser>,
IUserRoleStore<TUser>,
IUserClaimStore<TUser>,
IUserPasswordStore<TUser>,
IUserSecurityStampStore<TUser>,
IUserEmailStore<TUser>,
IUserLockoutStore<TUser>,
IUserPhoneNumberStore<TUser>
where TUser : ApplicationUser
{
private readonly IIdentityUserRepository<TUser> _userRepository;
public CustomUserStore(IIdentityUserRepository<TUser> userRepository)
{
_userRepository = userRepository;
} //rest of the code hidden sake of brevity
自定义用户存储与默认 Asp Net Core 身份模板配合良好,但在 is4aspid 模板中,当我尝试摆脱 Entity Framework 并放置我的自定义存储实现时,登录页面 returns 当我尝试访问受保护的资源时出现 404 消息,但除此之外,主页工作正常,没有错误消息或下面的日志消息
[13:03:04 Information] Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationHandler
AuthenticationScheme: Identity.Application was challenged.
此外,当发生这些事情时,不会调用控制器或 CustomUserStore
我使用的文档
Custom storage providers for ASP.NET Core Identity
IdentityServer4 Using ASP.NET Core Identity
编辑:ApplicationUser class 也是自定义实现,没有任何继承者,不像默认 ApplicationUser : IdentityUser
模板本身
我使用这样的代码将我自己的商店添加到 IdentityServer:
services.AddDbContext<ApplicationDbContext>(options =>
{
options.UseSqlServer(_configuration["ConnectionString"]);
});
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
问题出在 AddDefaultIdentity
本身,因为它不仅添加了 Identity 组件,还包含了很多东西 UI 我认为问题是因为 UI 组件与 [=10] 一起添加的=] 所以当我尝试使用项目的视图时它混淆了框架,解决方案是使用 AddIdentity
而不是 AddDefaultIdentity
所以这解决了问题,现在系统工作无缝。