【发布时间】:2021-09-25 09:32:54
【问题描述】:
上下文
我正在与我的开发团队一起开发客户端-服务器架构中的移动应用程序,因为也会有一个 web 客户端,允许一些用户(管理员)从浏览器执行某些操作。REST Api 目前通过以 JWT 的形式返回访问和刷新令牌来对用户进行身份验证。本地(用户名/密码)和 OAuth2.0(目前只有 Google)流程都可用,因为我为用户提供了这两种不同的身份验证选项。
问题
当从 webclient 调用 API 时,接下来的流程工作得很好,但是现在我们已经开始开发移动应用程序,出现了一个大问题:**如何在刷新后保持用户在移动应用程序上的身份验证令牌过期了?**所有著名的应用程序都不会提示用户进行身份验证,比如说每周或最糟糕的每天,但我仍然确信他们的身份验证实践(几乎)完美无缺。
尝试过的路径
我已经阅读了许多博客文章和文章,以及下面报道的一些 StackExchange 问答,但在移动设备上处理身份验证和访问持久性的正确方法仍不清楚。-
我是否应该创建一个(或多个)特定端点以仅在
User-Agent标头告诉 API 正在被移动设备调用时提供不会过期的令牌? -
如JWT (JSON Web Token) automatic prolongation of expiration 中所述,Auth0 放弃了移动端的 JWT,转而使用随机生成的字符串。在这种情况下有哪些可用的实现?我应该将此字符串用作已验证设备的永无止境的 id 并批准所有附加它的 API 调用吗?
-
在 OAuth 情况下,我是否应该(我不知道如何)对 OAuth 提供者执行静默调用以取回新的 idToken,然后使用它向我自己的 API 请求新令牌?
-
在本地情况下,我应该将用户凭据存储在本地吗?如果是这样,我该如何安全地做到这一点?
咨询资源
- What's the right OAuth 2.0 flow for a mobile app
- JWT refresh token flow
- Authenticating a mobile application with JWT and refresh tokens
- https://softwareengineering.stackexchange.com/questions/318471/jwt-refresh-token-exponentially
- https://auth0.com/docs/best-practices/mobile-device-login-flow-best-practices
- https://auth0.com/blog/refresh-tokens-what-are-they-and-when-to-use-them/
- https://mobile-security.gitbook.io/mobile-security-testing-guide/general-mobile-app-testing-guide/0x04e-testing-authentication-and-session-management
- https://tech.justeattakeaway.com/2019/12/04/lessons-learned-from-handling-jwt-on-mobile/(更专注于改进已经建立的架构)
...还有更多我没有报告超出问题的范围。
一些图表
这些是我们当前实现的流程,当 API 被 web 客户端使用时,它们会按预期工作。【问题讨论】:
标签: authentication mobile architecture jwt refresh-token