IdentityServer3令牌HandleStore

IdentityServer3令牌HandleStore,identityserver3,Identityserver3,我已经在我们的web应用程序中实现了IdentityServer3。我使用来自db的LocalRegistrationUserService和客户端的自定义登录。到目前为止效果很好 我的下一个任务是将访问令牌存储到数据库中。我已经看过IdentityServer3.EntityFramework源代码(),其中有很多内容,还有SQL表 我的问题是,我需要所有的源代码和SQL表吗?我只想存储代币并能够加载它们。还有没有人在没有使用EntityFramework的情况下这样做?如果有人有样品,请分享

我已经在我们的web应用程序中实现了IdentityServer3。我使用来自db的LocalRegistrationUserService和客户端的自定义登录。到目前为止效果很好

我的下一个任务是将访问令牌存储到数据库中。我已经看过IdentityServer3.EntityFramework源代码(),其中有很多内容,还有SQL表

我的问题是,我需要所有的源代码和SQL表吗?我只想存储代币并能够加载它们。还有没有人在没有使用EntityFramework的情况下这样做?如果有人有样品,请分享。多谢各位


ps:我不得不将其转换为VB,这是一件痛苦的事情。根据您的描述,您似乎有意将客户机和作用域保留在内存中,但所有令牌和流数据都是持久的

要支持标准的OIDC流,您绝对需要的不仅仅是TokenHandleStore。除许可商店外,每个运营商店都是必不可少的。只有当您的客户端永远不会提示用户同意范围时,此选项才是可选的。如果您只想支持流的一个子集,那么您可能可以用更少的资源溜过去,但这取决于所涉及的流。为了扩展性、后代性和一致性,您可能希望拥有一套功能齐全的操作存储

因此,选项是在启动时拉入并使用扩展方法,或者自己编写操作存储。自己编写会有一些好处,因为它可以很好地洞察所有OIDC流。您也不受EntityFramework的限制,可以自由选择数据访问方法

我自己写过运营商店,不包括同意书商店。模式与中的模式大不相同,但两者的用途相同:


答案是
ITokenHandleStore
。实现此接口将使您在自己的数据库中保存令牌。按照以下步骤操作

第一步。了解负责的接口。
ITokenHandleStore
本身没有任何签名

public interface ITokenHandleStore : ITransientDataRepository<Token>
{
}
第四步。最后要做的事
IdentityServer3
使用
Autofac
作为它的
IoC
容器,这意味着您必须注册自己的实现,
hoandedetokenhandlestore
。您可能在使用
IdentityServer 3
时看到过此代码

.
.
.
var factory = new IdentityServerServiceFactory();
factory.UseInMemoryUsers(Users.Get());
factory.UseInMemoryClients(Users.Get());
factory.UseInMemoryScopes(Users.Get());
.
.
.
是的,这个
工厂
是你这次应该看的。这是一个用于处理令牌和
IdentityServer3
管道中的每个任务的
工厂。只需在初始化
工厂
对象后添加此项即可

factory.TokenHandleStore = new Registration<ITokenHandleStore, HoanMadeTokenHandleStore>();
factory.TokenHandleStore=新注册();

然后,
autofac
将在运行时注入您的实现。您可以在自己的实现中编写任何与数据库相关的代码,例如
HoanMadeTokenHandleStore
。Entityframework、ADO.NET、Dapper.NET或显式SqlConnection和命令等等。

为什么不使用and进行配置?这是一个很好的例子。为什么需要在IdentityServer中的DB中存储访问令牌?你是说参考代币吗?或者你是说你想在客户端应用程序数据库中存储访问令牌?嗨,伙计们,谢谢你们的反馈。本杰明,谢谢你的链接。我去看看。Brock Allen,我之所以想在数据库中存储访问令牌,是因为我发现当我们的网站运行在一个平衡服务器之后时会出现问题。我读过一些文章,其中有一些小的调整来解决这个问题,但我没有硬件或软件来处理这个问题。我认为使用定制TokenHandlestore将解决服务器平衡问题,这就是为什么我要查看上面URL中的EntityFramework示例。identityserver嵌入到我们的网站中。如果平衡服务器后面有两个web服务器,则两个web服务器都将运行自己的IdentityServer并访问相同的数据库。客户端请求一个令牌,serverA生成一个令牌,存储在DB中并将其返回给客户端。当客户端发出请求时,平衡服务器将调用重定向到serverB。ServerB从db中检索令牌,并解析/验证并执行该请求。这就是我想要完成的。行吗?是的,我的令牌类型是Reference。谢谢你Benjamin,entityframework示例就在我的脑海中。。。它有客户、范围、同意、索赔和所有我不想碰的东西。我想知道我是否可以在汉德尔斯托做代币。但我不确定需要转换哪些文件。我们的网站是用vb.net而不是c#编写的。本杰明,谢谢你的表格布局。我去看看。
.
.
.
var factory = new IdentityServerServiceFactory();
factory.UseInMemoryUsers(Users.Get());
factory.UseInMemoryClients(Users.Get());
factory.UseInMemoryScopes(Users.Get());
.
.
.
factory.TokenHandleStore = new Registration<ITokenHandleStore, HoanMadeTokenHandleStore>();