从数据库中删除过期的OAuth令牌

时间:2012-06-14 12:09:50

标签: dotnetopenauth

在完成使用DotNetOpenAuth的WCF SOAP Web服务之后,我发现,一旦Consurtoken存储在OAuthConsumer表中,它就永远不会被删除,即使在令牌被认为过期之后也是如此。

我编辑了DotNetOpenAuth项目的标准AuthorizedConsumers.aspx页面,以便用户可以手动撤销对应用程序的访问,基本上从数据库中删除了consumertoken,但我想知道它是否应该是不可能的自动删除旧令牌。例如,当用户尝试访问令牌授予访问权限的应用程序时,不应该进行某种检查以查看是否已经有令牌,如果有,是否&# 39; s是否已过期,如果 已过期,则删除旧令牌,然后再制作新令牌?

我实际上并不知道是否已经有任何检查(我确实找到了它们但却找不到它们),是吗?我将如何添加代码以从数据库中删除过期的令牌?我究竟会在哪里插入该代码?在DataBaseTokenManager类的StoreNewRequestToken方法中?

谢谢!

1 个答案:

答案 0 :(得分:0)

清理数据库表超出了DotNetOpenAuth的范围。您可以随意实施它。例如,您可能有一个数据库存储过程,它删除已过期的令牌行,并以某种方式在计时器上调用它。 DotNetOpenAuth希望您只从令牌管理器界面的实现中返回有效(非过期)令牌。当DNOA首先要求您存储这些令牌时,这些令牌将到期。

至于避免令牌表变得过大,有几种方法。您可以使用短期令牌,并确保定期清理您的表。但最好的方法是在DotNetOpenAuth的OAuth 2实现中使用,所以如果你可以切换到OAuth 2那么这是理想的。一旦你在那里,你会发现根本没有令牌表。最接近的是Authorizations表,每个用户批准手势只有一行,您可以在这些授权过期时删除它们。通过该授权,客户端可以获得任意数量的唯一令牌,并且您的数据库永远不会增长,因为令牌是自我描述和签名的。 DNOA为您管理这一切。