C# 如何从现有数据库中获取identityServer4的用户
我试图了解如何将存储在现有数据库(位于:localhost:3306)中的用户(电子邮件、密码、firstname、lastname和os on)绑定到identityserver4项目中,以便使用这些信息登录用户或将新用户注册到该数据库中 我读了一些教程(特别是),但我认为这总是适用于同一项目中的db。我的数据库不在同一个项目中 在本文中,我阅读了有关asp.net核心标识的内容。但我不完全理解这两者之间的关系 有人能告诉我如何在我的项目中绑定一个数据库,以及身份在应用程序用户中扮演什么角色等等吗C# 如何从现有数据库中获取identityServer4的用户,c#,mysql,asp.net-core,asp.net-identity,identityserver4,C#,Mysql,Asp.net Core,Asp.net Identity,Identityserver4,我试图了解如何将存储在现有数据库(位于:localhost:3306)中的用户(电子邮件、密码、firstname、lastname和os on)绑定到identityserver4项目中,以便使用这些信息登录用户或将新用户注册到该数据库中 我读了一些教程(特别是),但我认为这总是适用于同一项目中的db。我的数据库不在同一个项目中 在本文中,我阅读了有关asp.net核心标识的内容。但我不完全理解这两者之间的关系 有人能告诉我如何在我的项目中绑定一个数据库,以及身份在应用程序用户中扮演什么角色等
提前感谢本文更适合您的情况。您链接的是配置数据,而不是用户数据: 简而言之,您希望通过Asp.Net核心标识访问用户数据。 您需要:
- 创建一个包含相关字段的用户类作为数据库
- 创建EntityFramework DbContext类以将数据库映射到类
- 使用aspnet核心标识注册用户类和dbcontext
- 告诉IdentityServer使用网络身份
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddEntityFramework()
.AddSqlServer()
.AddDbContext<YourUserStoreDbContextHere>(options =>
options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]));
services.AddIdentity<YourUserClassHere, YourRoleClassHereIfAny>()
.AddEntityFrameworkStores<YourUserStoreDbContextHere>()
.AddDefaultTokenProviders();
services.AddIdentityServer()
// Other config here
.AddAspNetIdentity<YourUserClassHere>();
}
public void配置服务(IServiceCollection服务)
{
//添加框架服务。
services.AddEntityFramework()
.AddSqlServer()文件
.AddDbContext(选项=>
使用SQLServer(配置[“数据:默认连接:连接字符串]);
服务.额外性()
.AddEntityFrameworkStores()
.AddDefaultTokenProviders();
services.AddIdentityServer()
//其他配置在这里
.addAsNetIdentity();
}
有关配置用户类和dbcontext的详细信息,请参阅AspNet Identity上的文档:您需要实现自己的
UserStore
()
实现某种类型的用户存储,比如这里的Teat存储,但将其指向外部DB。github.com/IdentityServer/IdentityServer4.Samples/blob/release/Quickstarts/8_EntityFrameworkStorage/src/QuickstartIdentityServer/Quickstart/Account/AccountController.csHi,您将大量的光明带入黑暗。我有一个关于用户类的问题。没有identity,我有一个类users(如表的名称),在这个类中,我定义了用户的所有详细信息(如电子邮件、街道、性别等)。如果我使用identity,我有一个从IdentityUser继承的ApplicationUser类。这和没有身份的用户是同一个类吗?在这里,我必须添加特殊信息(如性别),这些信息不属于IdentityUser?我希望你能理解我的意思。
public async Task<TapkeyUser> ValidateCredentialsAsync(string username, string password)
{
//This is pseudo-code implement your DB logic here
if (database.query("select id from users where username = username and password = password")
{
return new User(); //return User from Database here
} else {
return null;
}
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginInputModel model)
{
if (ModelState.IsValid)
{
// use our custom UserStore here
--------> if (_users.ValidateCredentials(model.Username, model.Password))
{
AuthenticationProperties props = null;
// only set explicit expiration here if persistent.
// otherwise we reply upon expiration configured in cookie middleware.
if (AccountOptions.AllowRememberLogin && model.RememberLogin)
{
props = new AuthenticationProperties
{
IsPersistent = true,
ExpiresUtc = DateTimeOffset.UtcNow.Add(AccountOptions.RememberMeLoginDuration)
};
};
// issue authentication cookie with subject ID and username
var user = _users.FindByUsername(model.Username);
await _events.RaiseAsync(new UserLoginSuccessEvent(user.Username, user.SubjectId, user.Username));
await HttpContext.Authentication.SignInAsync(user.SubjectId, user.Username, props);
// make sure the returnUrl is still valid, and if yes - redirect back to authorize endpoint or a local page
if (_interaction.IsValidReturnUrl(model.ReturnUrl) || Url.IsLocalUrl(model.ReturnUrl))
{
return Redirect(model.ReturnUrl);
}
return Redirect("~/");
}
await _events.RaiseAsync(new UserLoginFailureEvent(model.Username, "invalid credentials"));
ModelState.AddModelError("", AccountOptions.InvalidCredentialsErrorMessage);
}
// something went wrong, show form with error
var vm = await _account.BuildLoginViewModelAsync(model);
return View(vm);
}