我正在实现基于 DotNetOpenAuth 的 OAuth2 授权/资源服务器。我的服务器将发出寿命很长的访问令牌。这些令牌将在 iOS 设备上使用。我看到的流程是这样的,1)要求用户在 iOS 设备上输入他们的用户名/密码 2)请求访问令牌,授予类型为资源所有者密码凭据 3)授予并存储令牌在 iOS 设备上以供将来使用。
现在有时用户会被禁用。我想同时撤销令牌。我该怎么做呢?我怀疑我需要为此使用ICryptoKeyStore.RemoveKey
方法,但不确定如何找到要删除的密钥。
注 1:将来该服务器将被第三方 Web 应用程序使用。
注意 2:拥有授予类型的资源所有者密码凭据的要求源于这样一个事实,即认为在 iOS 设备上实现浏览器重定向不值得花时间。
更新 1
源代码中的一些挖掘表明 DotNetOpenAuth 不支持这种强制令牌过期的能力。此外,在标准实现中甚至没有检查令牌的生命周期。据我所见,calss 对此负责StandardAccessTokenAnalyzer
,它忽略了Lifetime
andUtcCreationDate
属性。此外,标准类似乎没有ResourceServer
任何数据库访问编码,令牌有效性仅由令牌内容检查,所以似乎如果我需要添加使令牌过期的能力,我需要ResourseServer
自己连接到数据库。我错过了什么吗?
更新 2 我想我在这里找到了答案:https ://groups.google.com/forum/#!topic/dotnetopenid/ aLabu1ujkt4 这不是我所希望的,我仍然有一些不清楚的地方。例如,安德鲁写道:
然后,您的自定义类可以获取访问令牌,然后使用对授权服务器的私有 HTTP 请求来验证令牌的持续有效性。
鉴于不包括授权 ID ,尚不清楚如何进行此验证。AccessToken
这会使查找目标授权记录变得困难。理论上,我们可以尝试通过结合客户、用户和发布时间来查找它,但据我所知,不能保证这些都是唯一的。