Mobile 移动应用程序如何获得对其API的长期访问;s

Mobile 移动应用程序如何获得对其API的长期访问;s,mobile,oauth-2.0,access-token,openid-connect,identityserver3,Mobile,Oauth 2.0,Access Token,Openid Connect,Identityserver3,我们公司正在构建一个移动应用程序(iOS),它需要与我们的API对话,该API由OpenIdConnect/OAuth2保护,使用 我的问题是,我最近使用的大多数应用程序都要求用户登录/注册一次,然后再也不注册 假设他们使用OAuth2令牌访问API,他们是如何实现的 OAuth支持通过“刷新”令牌进行offline\u访问,这允许用户无需再次登录即可获取新令牌。但是,它们也有一个到期日-因此考虑到以下情况: 用户创建帐户,获取访问令牌/刷新令牌。访问令牌在1小时后过期,刷新令牌在2小时后过期

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

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

假设他们使用OAuth2令牌访问API,他们是如何实现的

OAuth支持通过“刷新”令牌进行
offline\u访问
,这允许用户无需再次登录即可获取新令牌。但是,它们也有一个到期日-因此考虑到以下情况:

  • 用户创建帐户,获取访问令牌/刷新令牌。访问令牌在1小时后过期,刷新令牌在2小时后过期
  • 用户正在使用应用程序,应用程序在后台获取新的访问/刷新令牌
  • 用户关闭应用程序
  • 用户第二天回来
  • 此时,访问和刷新令牌都已过期。如何在不提示用户再次输入凭据的情况下获取新凭据

    据我所知,OpenIdConnect具有标识令牌的概念,只要该令牌在服务器上处于活动状态,就可以获取新的访问令牌,而无需再次提示用户

    因此,我只能想到两种应用程序实现这一点的方法:

  • 他们的后台服务在应用程序关闭时运行,不断获取新的访问/刷新令牌。这可能吗
  • 在应用程序启动时,如果访问/刷新令牌已过期,但标识令牌(会话)仍处于活动状态,请执行到身份验证服务器(隐藏web视图?)的静默访问,该服务器将自动获取一组新令牌
  • 2似乎是可能的,但这只适用于涉及SSO/cookie的基于浏览器的OAuth流(隐式授权代码)

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

    我错过了什么


    提前感谢。

    这些应用通常使用长寿命的刷新令牌,这些令牌不会像您建议的那样在30分钟内过期,但可能会持续数周/数月,直到用户被迫再次登录。使刷新令牌的生存期与访问令牌的生存期相同会导致失败,因为刷新令牌应该是旧访问令牌过期时可用于获取新访问令牌的令牌。刷新令牌通常比提供商的用户身份验证会话更有效。

    我们的Nativescript Angular应用程序也有类似的情况。我们将OAuth 2与PKCE一起用于身份验证过程,但我的团队对移动开发领域还相当陌生

    根据我的研究,似乎最佳实践建议刷新令牌的寿命应该在2周到2个月之间。目前,我们的访问令牌寿命设置为2分钟,刷新令牌寿命设置为30分钟。这意味着我们的用户必须每30分钟使用用户名和密码登录一次,这对于用户体验来说并不理想,我们为此收到了很多批评

    我们的登录页面使用WebView,因此我们也考虑尝试使用安全存储的用户名和密码版本自动填充表单字段,但后来意识到这并不能真正做到,而且对安全性也没有好处

    因此,为了改进登录过程并使其更加无缝,我们希望使用pin码设置face/touch ID。这意味着我们将不得不将刷新令牌的寿命推到2个月或尽可能长——这似乎是向前推进的最佳方法

    也就是说,另一个问题是,我们也有一个使用相同身份验证服务器的网站,因此,如果我们更改KeyClope设置,它也会更改该网站的设置,这将为web团队创造更多的工作


    所以我的问题是,我们是否应该只为移动访问使用单独的身份验证服务器?

    啊,我明白了。我想访问令牌应该是1小时,然后刷新令牌2小时。我感到困惑的是,刷新令牌在2小时后过期。我没想到会有很长的假期。所以他们可能有1小时的访问令牌,但是说3个月的刷新令牌?关于流行应用程序使用的时间范围的任何链接/统计信息?我认为像Spotify、Netflix等应用程序会好奇地想知道它们在代币上的时间。另外,为什么刷新令牌比身份验证会话长?原因?从我的头顶上看,刷新令牌生命周期:LinkedIn 60天,Google从不;谷歌是你的朋友;通常,与Web服务器的身份验证会话会持续几个小时或直到浏览器关闭,但本机应用程序需要持续更长时间的令牌,以避免每天都必须键入用户凭据。不过,服务器上的身份验证会话/身份令牌在移动应用程序中几乎不相关,正确的?因为第一次,用户将进行身份验证,获取身份令牌(使用用户数据),将用户数据本地存储在应用程序中(因此不再关心令牌,根本不需要存储)。然后获取API使用的访问/刷新令牌。即使服务器上的身份令牌/会话已过期,只要访问令牌有效,应用程序也可以继续访问API。。正确的?基本上,访问/刷新令牌并不关心标识令牌?是的,除非您将其到期日配置为与标识令牌(紧密)对齐