【问题标题】:Removing expired OAuth tokens from database从数据库中删除过期的 OAuth 令牌
【发布时间】:2013-03-05 12:28:26
【问题描述】:

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

我已经编辑了 DotNetOpenAuth 项目的标准 AuthorizedConsumers.aspx 页面,以便用户可以手动撤销对应用程序的访问权限,基本上是从数据库中删除消费者令牌,但我想知道是否不能自动删除旧令牌.例如,当用户尝试访问令牌授予访问权限的应用程序时,是否应该进行某种检查以查看是否还没有令牌,如果有,无论是否过期,删除如果旧令牌 过期,在制作新令牌之前?

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

谢谢!

【问题讨论】:

  • 啊,刚刚意识到不,旧令牌不应该在制作新令牌时被删除。但是,我们希望防止数据库中的行数变得过高。因此,我们仍然希望删除旧令牌。有没有办法在代码中做到这一点,还是应该通过 mysql 数据库中的某种事件来完成?
  • 我也在想同样的事情。您是从哪里得知不删除旧令牌的?我假设应该删除过期的令牌。至少对我来说是有意义的。

标签: dotnetopenauth


【解决方案1】:

清理数据库表超出了 DotNetOpenAuth 的范围。你可以随心所欲地实现它。例如,您可能有一个数据库存储过程,它删除已过期的令牌行并以某种方式在计时器上调用它。 DotNetOpenAuth 期望您仅从令牌管理器接口的实现中返回有效(未过期)令牌。当 DNOA 第一次要求您存储这些令牌时,会告知您这些令牌的到期时间。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-27
    • 2016-06-24
    • 2017-01-18
    • 2016-11-29
    • 2012-04-05
    • 1970-01-01
    • 2020-05-31
    • 1970-01-01
    相关资源
    最近更新 更多