2

我是 IdentityServer 的新手,在设置它时遇到了一些麻烦。

由于我不会进入这里的原因,我不能使用 ASP.NET Identity 或 EntityFramework。我有一个自定义数据库供我需要对其进行身份验证的用户使用,因此我提取了样本并尝试将 InMemoryUsers 切换为自定义持久性存储。

这是我的 ConfigureServices 方法:

public void ConfigureServices(IServiceCollection services)
{
    services.AddIdentityServer(options =>
        {
            options.AuthenticationOptions = new IdentityServer4.Configuration.AuthenticationOptions
            {
            };
        })
    .AddInMemoryClients(Clients.Get())
    .AddInMemoryScopes(Scopes.Get())
    .SetTemporarySigningCredential();

    services.AddMvc();

    services.AddTransient<ISignInService, SignInService>();
    services.AddTransient<IUserRepository, UserRepository>();
    services.AddTransient<IUserService, UserService>();

    services.AddTransient<IResourceOwnerPasswordValidator, ResourceOwnerPasswordValidator>();
    services.AddTransient<IProfileService, ProfileService>();
}

我知道这种方法是不完善的,因为我还在测试一些东西,但是当我运行应用程序时,我得到了这个错误:

System.InvalidOperationException 未指定授权的存储机制。使用“AddInMemoryStores”扩展方法注册开发版本。

显然我不想在内存存储中使用生产实现,但我不确定我需要做什么来解决这个问题。

4

1 回答 1

3

AddInMemoryStores 没有最好的名称。它实际上添加了与已发行材料/令牌相关的所有瞬态数据的存储。

我们有时会在生产中使用它,因为很多时候我们真的不需要将这些数据保存到磁盘上,而且我们不使用长期存在的令牌。

看看这里的扩展方法做了什么,看看IPersistedGrantStore合约是什么样子以获得更好的想法。

于 2016-10-04T05:08:40.403 回答