我正在尝试使用OAuth2使用后端REST API对多个客户端应用程序进行身份验证。我有三个完全独立的实体:后端API服务器,前端Javascript应用程序和分布式移动应用程序。客户端是第一方应用程序,因此他们将使用直接用户名/密码输入来生成访问令牌。
所以我的问题是:是否可以使用OAuth2从这些客户端对后端REST API进行身份验证,而无需在访问令牌到期时每小时重新输入用户凭据?我想不出一个解决方案可以让访问令牌过期一小时,但是在后台无需刷新访问令牌而无需额外的用户输入。
是的,我知道如何设置包含刷新令牌的加密的仅HTTP cookie。这适用于Javascript应用程序,但对移动应用程序没有任何作用。或者可能弹出的任何其他非Web客户端。
我认为我提出了一个好主意,即使用额外的身份验证服务器代表客户端协商身份验证。因此,客户端将向身份验证服务器发送用户名/密码,然后身份验证服务器将调用API,保存访问/刷新令牌,最后将访问令牌提供给客户端应用程序。想法是当访问令牌到期时,客户端然后可以将访问令牌发送到认证服务器,认证服务器查找刷新令牌,调用API以获得新的访问令牌,并返回新的访问令牌。客户端现在已经刷新了其访问令牌,而不知道刷新令牌。
但后来我意识到我基本上取消了刷新令牌的存在,而是为一个新的访问令牌交换过期的访问令牌。除非我错了,这并不比直接向客户端提供刷新令牌更好 - 如果攻击者获得了访问令牌,他可以永远拥有更多的访问权限。
根据我的研究,我得出的结论是,我想要实现的目标根本不可能。在这种情况下,是否有唯一可能的方法来持久登录以增加访问令牌的到期时间?在我看来,这是一个非常糟糕的结果。 当然存在其他一些解决方案,对吧?!