2

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

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

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

谢谢!

4

1 回答 1

0

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

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

于 2013-03-05T04:28:26.393 回答