gpt4 book ai didi

.net - 如何使用DotNetOpenAuth强制OAuth2访问 token 过期

转载 作者:行者123 更新时间:2023-12-04 04:07:00 30 4
gpt4 key购买 nike

我正在基于DotNetOpenAuth实现OAuth2授权/资源服务器。我的服务器将发出生命周期很长的访问 token 。这些 token 将在iOS设备上使用。我看到的流程是这样的:1)要求用户在iOS设备上输入用户名/密码2)请求具有资源所有者密码凭据授予类型的访问 token 3)授予并存储 token 在iOS设备上以备将来使用。

现在,用户会不时地被禁用。我想同时撤销 token 。我该怎么做呢?我怀疑我需要为此使用ICryptoKeyStore.RemoveKey方法,但不确定如何找到要删除的键。

注1:将来,该服务器将由第三方Web应用程序使用。

注意2:要求具有资源所有者密码凭据授予类型的要求是由于这样的事实,即认为在iOS设备上实现浏览器重定向是不值得的。

更新1
在源代码中的一些挖掘表明,DotNetOpenAuth不支持强制将 token 过期开箱即用的功能。而且,在标准实现中,甚至不检查 token 的生命周期。据我所知,calss负责的是StandardAccessTokenAnalyzer,它忽略了LifetimeUtcCreationDate属性。而且似乎标准ResourceServer类似乎没有任何数据库访问编码, token 有效性仅由 token 内容检查,因此看来,如果我需要添加使 token 失效的功能,则需要自己将ResourseServer连接到数据库。我想念什么吗?

更新2
我想我在这里找到了答案:https://groups.google.com/forum/#!topic/dotnetopenid/aLabu1ujkt4这不是我想要的,我仍然有一些疑问。例如,安德鲁写道:

Your custom class then could take an access token, then use a private HTTP request to the authorization server to verify the continued validity of the token.



鉴于 AccessToken不包含授权ID,目前尚不清楚该验证如何进行。这会使查找目标授权记录变得困难。从理论上讲,我们可以尝试通过客户端,用户和发布时间的组合来查找它,但是据我所知,不能保证它们将是唯一的。

最佳答案

Now from time to time users get disabled. I would like to revoke the token at the same time. How do I do this? I suspect that I need to use ICryptoKeyStore.RemoveKey method for that, but not sure how to find which key to remove.



您可以通过撤消 token 后面的授权来撤消 token 。这通常意味着您删除数据库的授权表中的条目。它必须具有的作用是,对于此授权,您的 IAuthorizationServerHost.IsAuthorizationValid的实现将返回false。

这不会立即撤消访问 token ,但是会阻止客户端刷新过期的访问 token 。因此,只要您的访问 token 的生存期相当短(一小时或更短),那么用户的禁用帐户就意味着所有客户端访问都将在一小时内终止。

Note 2: the requirement to have grant type of Resource Owner Password credentials stems from the fact that it was decided that implementing browser redirection on iOS device is not worth the time.



这是您的应用。但我敦促每个人都使用正确的浏览器重定向流程。用户可能已经在设备的浏览器上登录了您的服务器,因此他们可以避免完全通过这种方式输入其凭据,从而提高了转换率。与设备应用程序相比,用户也更可能信任浏览器询问其凭据。至少我希望如此。

顺便说一句,非身份验证客户端(TBD)可能不支持资源所有者密码授予类型,通常安装的设备应用程序将支持该类型。因此,您可能被迫使用其他赠款类型。

Update 1 Some excavations in the source code suggest that DotNetOpenAuth does not support this ability to force token expiration out of the box. Moreover in the standard implementation lifetime of the token is not even checked. As far as I can see the calss is responsible for this is StandardAccessTokenAnalyzer and it ignores the Lifetime and UtcCreationDate properties.



DotNetOpenAuth会检查并拒绝过期的访问 token 。只是不在那个类。已在反序列化访问 token 的代码中检查了该代码。

Also it does not seem that the standard ResourceServer class has any database access coded, the token validity checked by the token content only, so it seems that if I need to add ability to expire the tokens I need to wire up the ResourseServer to database myself. Am I missing something?



您是正确的, ResourceServer类不需要任何数据库访问,因为访问 token 在整个生命周期中都被认为是有效的(默认情况下它们是不可撤销的)。这就是为什么建议使用较短的访问 token 生存期的原因。这并不像您想象的那么遥远。例如,您很可能已经使用过的ASP.NET表单例份验证基于相同的模式:对用户进行一次身份验证,访问数据库以进行凭据检查,然后向用户代理发出经过加密并签名的HTTP cookie。从那时起,不会对每个传入的HTTP请求都命中数据库-cookie签名经过验证,然后假定有效,直到cookie过期。相同的原则。除了在HTTP cookie情况下,它存在滑动超时,因此只要用户在站点上保持事件状态,就不必重新进行身份验证。使用OAuth 2访问 token ,无论使用它们的积极程度如何, token 都将过期,从而强制刷新 token ,然后可以拒绝 token 刷新以锁定访问权限。

It is unclear how this verification can happen, given that AccessToken does not include Authorization Id. This can make finding the target Authorization record difficult. In theory we can try to look it up by combination of client, user and issue time, but as far as I can see there are no guarantee that these will be unique.



的确没有包含ID,但是client-user-issue-scope的元组应该是唯一的,因为授权表应该对其具有唯一的约束,因为重复没有意义。此外,如果它们不是唯一的,则只要有该元组的任何记录的存在就表明授权是有效的。

希望这可以帮助。

关于.net - 如何使用DotNetOpenAuth强制OAuth2访问 token 过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10395368/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com