使用数据库代替内存存储标识服务器4

时间:2016-05-09 10:23:29

标签: asp.net authentication single-sign-on thinktecture-ident-server

请指导我如何自定义identityserver 4以使用数据库而不是内存存储。

需要覆盖的类列表以及如何配置它们

1 个答案:

答案 0 :(得分:0)

我知道这是一个比较老的问题,但是没有答案,其他人可能会像我一样偶然发现这个问题,并且需要一个解决方案。

这里是walk through guide for setting up database usage via entity framework,它是Identity Server 4文档的一部分。如果您刚开始使用Identity Server,则可以直接使用IS4模板项目进行设置,以通过实体框架使用数据库存储。转到here并查看dotnet new is4ef模板的信息


将内存存储转换为数据库存储

如果您已经在使用内存存储中的Identity Server 4项目,则基本上,上面的演练将为您安装IdentityServer4.EntityFramework Nuget软件包。然后,您将需要运行EF迁移来创建数据库以存储Identity Server配置和操作数据,或者可以选择使用{{3}中的ConfigurationDb.sqlPersistedGrantsDb.sql脚本自行设置数据库}(删除迁移命令并根据需要进行调整)。

下一步是将 Startup.cs <中的AddInMemoryClients方法中的当前调用替换为AddInMemoryIdentityResourcesAddInMemoryApiResourcesConfigureServices / strong> 。您将使用对AddConfigurationStore扩展方法的AddOperationalStoreIServiceCollection.AddIdentityServer扩展的新调用来替换这些调用。像这样:

public void ConfigureServices(IServiceCollection services)
{
    //other configuration code ...
    
    string connectionString = "your DB connectionString";
    
    services.AddIdentityServer()
        // this adds the config data DB support (clients, resources, CORS)
        .AddConfigurationStore(options =>
        {
            options.ConfigureDbContext = builder => builder.UseSqlServer(connectionString);
        })
        // this adds the operational data DB support (codes, tokens, consents)
        .AddOperationalStore(options =>
        {
            options.ConfigureDbContext = builder => builder.UseSqlServer(connectionString);
        });
}