在 IdentityServer3 中,您应该如何 link 自定义 TokenHandleStore 实现中的令牌声明?
In IdentityServer3, how should you link the Claims to Token in a custom TokenHandleStore implementation?
我正在实施一个 IdentityServer3 应用程序,同时密切关注 EntityFramework IdentityServer3 解决方案。然而,问题是……
保存令牌对象时,如果在保存令牌时未以某种方式将声明link编辑到令牌here,当您的客户端调用您的资源时,将不可避免地导致未经授权的请求服务器。当从数据库加载令牌时会发生这种情况,因为最初附加到令牌的声明不再存在(因为它们未保存)。
IdentityServer3 中的内存解决方案没有这个问题,因为您的对象保留在内存中,因此 Token 对象中的声明列表保留 "attached" 到令牌。有关内存解决方案,请参阅 here。
如果您在保存时不link声明令牌,则在从数据库中检索引用令牌时无法对其进行验证。
我想你保存Token的时候需要保存Claims和Token的关系。但是,这是有问题的,因为在代码的那个点(参见 here),您无法轻松可靠地确定声明是范围声明、客户声明还是用户声明。
您如何正确地将记录插入 joining/linking table 从而 link 令牌到正确的声明 table? 因为有一个 ScopeClaims table,一个 ClientClaims table 并且可以有一个 UserClaims table... 通常与任何给定的令牌都是客户、范围和用户声明的混合体。
以保留声明的方式处理令牌保存有哪些建议?
更新
正如 John 指出的那样,EF 解决方案在保存时序列化整个 Token 对象,因此当查询 Token 时,会发生反序列化过程,重新组合 Claims 和 Token 中的其他字段。按照这种方法,您不必想出一种方法来 link 使用连接 table 或类似方法来声明对令牌的声明。我最初忽略了这个重要的功能。
一种方法是遵循 EF 实现如何处理它 - 通过将额外声明存储为序列化 JSON 字符串。因为那是idsrv的作者写的,所以也是一个很好的参考:)
我正在实施一个 IdentityServer3 应用程序,同时密切关注 EntityFramework IdentityServer3 解决方案。然而,问题是……
保存令牌对象时,如果在保存令牌时未以某种方式将声明link编辑到令牌here,当您的客户端调用您的资源时,将不可避免地导致未经授权的请求服务器。当从数据库加载令牌时会发生这种情况,因为最初附加到令牌的声明不再存在(因为它们未保存)。
IdentityServer3 中的内存解决方案没有这个问题,因为您的对象保留在内存中,因此 Token 对象中的声明列表保留 "attached" 到令牌。有关内存解决方案,请参阅 here。
如果您在保存时不link声明令牌,则在从数据库中检索引用令牌时无法对其进行验证。
我想你保存Token的时候需要保存Claims和Token的关系。但是,这是有问题的,因为在代码的那个点(参见 here),您无法轻松可靠地确定声明是范围声明、客户声明还是用户声明。
您如何正确地将记录插入 joining/linking table 从而 link 令牌到正确的声明 table? 因为有一个 ScopeClaims table,一个 ClientClaims table 并且可以有一个 UserClaims table... 通常与任何给定的令牌都是客户、范围和用户声明的混合体。
以保留声明的方式处理令牌保存有哪些建议?
更新 正如 John 指出的那样,EF 解决方案在保存时序列化整个 Token 对象,因此当查询 Token 时,会发生反序列化过程,重新组合 Claims 和 Token 中的其他字段。按照这种方法,您不必想出一种方法来 link 使用连接 table 或类似方法来声明对令牌的声明。我最初忽略了这个重要的功能。
一种方法是遵循 EF 实现如何处理它 - 通过将额外声明存储为序列化 JSON 字符串。因为那是idsrv的作者写的,所以也是一个很好的参考:)