在多租户环境中配置IdentityServer4 ConfigurationStore和OperationalStore

时间:2018-09-19 13:23:45

标签: identityserver4 multi-tenant

我们有一个使用IdentityServer4进行身份验证的Web API。我正在尝试通过保留现有数据库来更改身份验证服务以支持多租户。因此,每个租户都有单独的数据库。

我目前正在努力配置ConfigurationStore和OperationalStore。

选项01:由于每个租户都有单独的数据库,因此可以将ConfigurationDb和PersistedGrantDb相关表添加到这些DB中。

选项02:使用公共数据库保留与ConfigurationDb和PersistedGrantDb相关的表。

什么是最好的方法?

services.AddIdentityServer()
    // this adds the config data from DB (clients, resources, CORS)
    .AddConfigurationStore(options =>
    {
        options.ConfigureDbContext = builder =>
            builder.UseSqlServer(connectionString,
                sql => sql.MigrationsAssembly(migrationsAssembly));
    })
    .AddOperationalStore(options =>
    {
        options.ConfigureDbContext = builder =>
            builder.UseSqlServer(connectionString,
                sql => sql.MigrationsAssembly(migrationsAssembly));

        // this enables automatic token cleanup. this is optional.
        options.EnableTokenCleanup = true;
        options.TokenCleanupInterval = 30; // interval in seconds
    });

1 个答案:

答案 0 :(得分:0)

我们找不到在单独的数据库中配置ConfigurationStore和OperationalStore的方法。从那以后,我们已经在公共数据库中配置了它们。因此,最终的数据库结构如下所示。

  • TenantDB:所有租户的通用数据库。拥有租户配置 如租户名称,主机/域详细信息,连接字符串。和 ConfigurationStore和OperationalStore配置。
  • Tenant01DB:租户01数据
  • Tenant02DB:租户02数据
  • Tenant03DB:租户03数据