移动应用程序如何获得对其 API 的长期访问权限?

RPM*_*984 4 mobile access-token oauth-2.0 openid-connect identityserver3

我们公司正在构建一个移动应用程序 (iOS),它需要使用IdentityServer与我们的 API 进行通信,该 API 由 OpenIdConnect/OAuth2 保护。

我的问题是,我现在使用的大多数应用程序都要求用户登录/注册一次,然后就不再登录/注册。

假设他们使用 OAuth2 令牌访问 API,他们如何实现这一目标?

OAuth 支持offline_access通过“刷新”令牌,这允许用户无需再次登录即可获取新令牌。但是,它们也有有效期 - 因此考虑到以下情况:

  1. 用户创建帐户,获取访问令牌/刷新令牌。访问令牌将在 1 小时后过期,刷新令牌将在 2 小时后过期。
  2. 用户正在使用该应用程序,应用程序在后台获取新的访问/刷新令牌
  3. 用户关闭应用程序
  4. 用户第二天回来

此时,访问令牌和刷新令牌都已过期。他们如何获得新的凭据,而不提示用户再次输入凭据?

我了解 OpenIdConnect 有身份令牌的概念,只要它在服务器上处于活动状态,就可以获取新的访问令牌,而无需再次提示用户。

所以,我只能想到应用程序执行此操作的两种方式:

  1. 他们有后台服务,在应用程序关闭时运行,不断获取新的访问/刷新令牌。这可能吗?
  2. 在应用程序启动时,如果访问/刷新令牌已过期但身份令牌(会话)仍处于活动状态,请静默访问身份验证服务器(隐藏的 Web 视图?),这将自动获取一组新的令牌。

2 似乎是可能的,但这仅适用于涉及 SSO/cookie 的基于浏览器的 OAuth 流(隐式授权代码)。

对于具有本机登录(应用程序中的 U/P)的应用程序,它们很可能使用资源所有者密码凭据流程,该流程不支持 SSO(无浏览器,无 cookie)。那么他们如何获得新的令牌,除非他们在客户端应用程序本身中存储可逆的用户名/密码,然后再次将它们传递到身份验证服务器以获取新的令牌?

我缺少什么?

提前致谢。

Han*_* Z. 5

这些应用程序通常使用长期刷新令牌,这些令牌不会按照您的建议在 30 分钟内过期,但可能会持续数周/数月,直到用户被迫再次登录。使刷新令牌的生命周期与访问令牌相同就达不到目的,因为刷新令牌应该是在旧令牌过期时可用于获取新访问令牌的令牌。刷新令牌的寿命通常比提供者处的用户身份验证会话的寿命长。