OAuth 2.0应该用于身份验证超时吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OAuth 2.0应该用于身份验证超时吗?相关的知识,希望对你有一定的参考价值。
移动应用程序的开发人员正在使用OAuth 2.0令牌的超时期限来检查应用程序何时必须重新向服务器进行身份验证。
这与我对正确使用OAuth 2.0令牌的理解相冲突,尽管我并不确定我是否正确。
我的理解:
OAuth不是关于身份验证,而是关于授权,例如该设备是否可以代表用户访问服务器上的某些资源。身份验证在逻辑上先于授权,并且是关于确认用户是否是他们所说的人。
因此,用户提供凭据(用户名和密码),服务器验证是,该用户是Bob。
Bob登录的应用程序希望访问Bob已经过身份验证的服务器上的某些资源 - 例如来自API的数据。因此,应用程序请求OAuth令牌并将其授予,其属性之一是它存在多长时间。应用程序和服务器交换密钥,以及应用程序和服务器之间的数据使用密钥加密。
如果没有密钥,读取明文通信的入侵者将无法对其进行解码。但是,如果入侵者能够获得密钥,他们将能够。
这就是OAuth令牌生命终结的地方。我们不想永远使用相同的OAuth令牌(密钥),因为如果入侵者能够获得该令牌,他们就可以永久地表达我们的通信。但是,如果我们每隔x小时更新一次令牌,那么他们可能只会在x小时内破坏信息(假设是2小时)。
我认为OAuth令牌到期时间不应与用户保持身份验证的时间相关联。这完全取决于开发人员。在我们的例子中,如果用户有一些设备安全性(例如密码),那么我们可以让它们长时间保持身份验证(例如几个月)。如果他们没有设备安全性,那么我想强制他们在合理的不活动时间后重新认证,可能是24小时。
这是正确与否,如果没有,是什么部分。
提前致谢。
布赖恩
您对OAuth 2.0的理解是正确的。该协议以非常抽象的方式定义了获取令牌的方法,客户端可以使用该方法与受保护的端点进行通信。
RFC6749在与授权服务器(令牌获取)通信时以及在针对API /受保护端点(RFC6750中定义的承载令牌使用)使用时强制使用TLS。这可以保护令牌免受传输中的攻击。
建议OAuth访问令牌的生命周期较短。这是为了避免令牌窃取以及客户端可以执行的令牌滥用。您可以从RFC6819了解更多有关最佳实践的信息。可以从here读取访问令牌生命周期细节。
现在关于选择正确的生命时间。正如您已经想到的那样,使用刷新令牌是更新访问令牌的理想方法,而不是拥有持久访问令牌。例如,刷新令牌可以在几天内有效,而访问令牌仅在几个小时内有效。
但要注意以下几点,
+您的应用程序是否可以获取并保护刷新令牌
例如,SPA无法获取刷新令牌,因为它无法在延长的时间内存储它。在这种情况下,您需要寻找替换机制来更新访问令牌。
+访问令牌是否用于外部域
对外部API使用访问令牌会增加威胁向量。例如,如果您有一个封闭的系统(一个域中的客户端和后端),那么您可能会想到增加访问令牌的生命周期。但不是像24小时这样的长时间。
+单点登录(SSO)
您可以获得授权服务器的帮助,以便在浏览器之上维护SSO行为,而不是使用持久访问令牌。这类似于您在现代登录对话框中观察到的“记住我”。登录后,浏览器会保留一段持续一段时间的cookie(例如: - 一周)。下次使用OAuth令牌获取流时,授权服务器会检测此登录状态,从而跳过登录对话框。当然,这种方法必须根据确切的安全/政策要求来决定。
总之,使用访问令牌可以缩短生命周期。使用刷新令牌是令牌更新的理想方法。但根据具体情况,您也可以选择其他选择。
以上是关于OAuth 2.0应该用于身份验证超时吗?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Laravel API 实现 OAuth 2.0 身份验证
OAuth 2.0 服务器如何知道在客户端身份验证期间应该使用哪个密钥来解析 jwt 令牌? (client_secret_jwt)
如何在 JMeter 中进行 OAuth 2.0 身份验证?