我是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'扩展方法注册开发版本。
显然我不想在内存存储中用于生产实现,但我不确定我需要做些什么来解决这个问题。
答案 0 :(得分:3)
AddInMemoryStores没有最好的名字。它实际上为所有与已发布材料/代币相关的瞬态数据添加了商店。
我们有时会在生产中使用它,因为很多时候我们并不需要将这些数据保存到磁盘上,而且我们也不会使用长寿命令牌。
看一下扩展方法的作用here并查看IPersistedGrantStore
合约的内容,以便更好地了解。