移动应用程序的开发人员正在使用OAuth 2.0令牌的超时期限来检查应用程序何时必须与服务器重新进行身份验证。
尽管我不确定自己是否正确,但这与我对OAuth 2.0令牌正确使用的理解相冲突。
我的理解:
OAuth与身份验证无关,而与授权有关,例如该设备可以代表用户访问服务器上的某些资源。认证从逻辑上讲是在授权之前进行的,它是关于确认用户的身份。
因此,用户提供凭据(用户名和密码),并且服务器验证是,该用户是Bob。
鲍勃(Bob)登录的应用程序希望访问鲍勃(Bob)上已通过身份验证的服务器上的某些资源,例如来自API的数据。因此,应用程序请求OAuth令牌并被授予,其属性之一是它存在的时间。应用程序和服务器交换密钥,并且使用密钥对应用程序和服务器之间的数据进行加密。
没有密钥的入侵者将无法读取纯文本通信。但是,如果入侵者能够获得密钥,他们将能够。
这是OAuth令牌寿命终止的地方。我们不想永远使用相同的OAuth令牌(密钥),因为如果入侵者能够获得该令牌,则他们可以永远破坏我们的通信。但是,如果我们每隔X个小时刷新一次令牌,那么它们只能使信息减少X个小时(比如说2个小时)。
我认为OAuth令牌的过期时间与用户保持身份验证的时间无关。这完全取决于开发人员。在我们的情况下,如果用户具有某种设备安全性(例如密码),那么我们可以让他们长时间保持身份验证(例如几个月)。如果他们没有设备安全性,那么我想迫使他们在一段合理的闲置时间(可能是24小时)后重新进行身份验证。
这是否正确?如果不正确,则是什么部分。
谢谢。
布莱恩
答案 0 :(得分:1)
您对OAuth 2.0的理解是正确的。该协议以非常抽象的方式定义了一种获取令牌的方法,客户端可以使用该令牌与受保护的端点进行通信。
RFC6749要求在与授权服务器通信(获取令牌)以及针对API /受保护的端点使用TLS时使用TLS(RFC6750中定义的承载令牌使用)。这样可以保护令牌免受传输中的攻击。</ p>
建议OAuth访问令牌的寿命较短。这是为了避免令牌窃取以及客户端可能进行的令牌滥用。您可以从RFC6819阅读更多有关最佳做法的信息。可以从here中读取访问令牌生存期的详细信息。
现在选择正确的使用寿命。正如您已经知道的那样,使用刷新令牌是更新访问令牌的理想方法,而不是使用持久的访问令牌。例如,刷新令牌可以在几天内有效,而访问令牌仅在几个小时内有效。
但请注意以下事项,
+ 您的应用程序是否可以获取并保护刷新令牌
例如,SPA无法获得刷新令牌,因为它无法长时间存储它。在这种情况下,您需要寻找其他机制来更新访问令牌。
+ 是用于外部域的访问令牌
对外部API使用访问令牌会增加威胁向量。例如,如果您有一个封闭的系统(一个域中的客户端和后端),那么您可能会考虑增加访问令牌的生存时间。但是不会像24小时这样长时间。!
+ 单点登录(SSO)
您可以使用授权服务器的帮助来维持浏览器顶部的SSO行为,而不是使用持久的访问令牌。这类似于您在现代登录对话框中观察到的“记住我”。登录后,浏览器会保留一个持续一段时间(例如:一周)的cookie。下次使用OAuth令牌获取流程时,您的授权服务器会检测到此登录状态,因此跳过登录对话框。当然,必须根据确切的安全/策略要求来决定这种方法。
总而言之,请使用使用寿命较短的访问令牌。使用刷新令牌是令牌更新的理想方法。但是根据情况,您也可以选择其他方法。