我正在尝试使用Identity Core 2.0和我自己的自定义表和EF Core 2.0构建身份验证功能。
问题是我没有使用角色,也没有使用声明,所以我有一个包含用户信息的表/ DbSet
。我已经实现了所需的接口,一切看起来都很好。我也在使用JWT身份验证。问题是我不知道如何在Startup中配置服务。这是我目前的代码:
public void ConfigureServices(IServiceCollection services)
{
services
.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = Configuration["JwtIssuer"],
ValidAudience = Configuration["JwtAudience"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["JwtKey"]))
};
});
services.AddDbContext<MyDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<User, IdentityRole>()
//.AddEntityFrameworkStores<MyDbContext>()
.AddDefaultTokenProviders();
services.AddTransient<IUserRepository, UserRepository>();
services.AddTransient<IUserStore<User>, UserStore>();
services.AddTransient<IEmailSender, EmailSender>();
services.AddMvc();
}
其中User
是我自定义的用户类实现。同样适用于UserStore
。
但是,我不确定如何配置特定的身份服务。我应该拨打services.AddIdentity
,但它需要TRole
类型的参数,我没有实现,并且没有提供角色类型也没有任何变化。我要么必须实现虚拟/使用IdentityRole
,要么我必须提取扩展方法的内容并手动添加它们,这对我来说似乎不是一个好主意。此外,它默认添加Cookie Auth,因此它不会为我删除它。以下是我发现的扩展方法的正文:ASP.NET Identity Ref-1 / ASP.NET Identity Ref-2。
我应该如何注册服务?另外,考虑到情况(JWT,自定义表的身份),我在配置中遗漏了其他东西。