C# 如何从现有数据库中获取identityServer4的用户

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核心标识的内容。但我不完全理解这两者之间的关系 有人能告诉我如何在我的项目中绑定一个数据库,以及身份在应用程序用户中扮演什么角色等

我试图了解如何将存储在现有数据库(位于:localhost:3306)中的用户(电子邮件、密码、firstname、lastname和os on)绑定到identityserver4项目中,以便使用这些信息登录用户或将新用户注册到该数据库中

我读了一些教程(特别是),但我认为这总是适用于同一项目中的db。我的数据库不在同一个项目中

在本文中,我阅读了有关asp.net核心标识的内容。但我不完全理解这两者之间的关系

有人能告诉我如何在我的项目中绑定一个数据库,以及身份在应用程序用户中扮演什么角色等等吗


提前感谢

本文更适合您的情况。您链接的是配置数据,而不是用户数据:

简而言之,您希望通过Asp.Net核心标识访问用户数据。 您需要:

  • 创建一个包含相关字段的用户类作为数据库
  • 创建EntityFramework DbContext类以将数据库映射到类
  • 使用aspnet核心标识注册用户类和dbcontext
  • 告诉IdentityServer使用网络身份
这就是您的Startup ConfigureServices方法在实现后的外观。这里没有显示需要创建的DbContext和用户类

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);
    }