Xamarin.iOS / Web API JWT 刷新令牌(如果过期)

Posted

技术标签:

【中文标题】Xamarin.iOS / Web API JWT 刷新令牌(如果过期)【英文标题】:Xamarin.iOS / Web API JWT refresh token if it expires 【发布时间】:2019-09-17 19:30:37 【问题描述】:

我有一个Web API,它为用户提供了需要在我的移动应用程序上显示的所有数据。

OWIN JWT Authentication 已实现并且工作正常。有一个端点/oauth2/token 为用户提供一个令牌,所有端点都有[Authorize] 属性过滤器来验证它。

令牌expiration 设置为 5 分钟。

登录会话通过一个单独的SESSION-ID 维护,该SESSION-ID 存储在Keychain 中,并且还在服务器端检查活动会话。每次用户在应用程序内登录时,都会生成一个新令牌,并且用户可以访问 API 方法来获取数据。

问题

如果用户让应用程序打开超过 5 分钟 (Token expiration time) 怎么办?令牌已过期,将无法使用,如何刷新?我应该什么时候刷新它?

我阅读了有关刷新令牌的信息,但不确定如何处理它们(这是正确的选择吗?),因为如果令牌已过期,[Authorize] 属性只会拒绝我的调用,而不提供过期消息,我可以'不知道什么时候是过期令牌还是无效令牌。

【问题讨论】:

【参考方案1】:

如果用户让应用程序打开超过 5 分钟怎么办 (令牌到期时间)?该令牌将不可用,因为它有 过期了,怎么刷新?

如果我理解正确,您设置了The token expiration to 5 minutes,这意味着如果用户打开应用程序超过 5 分钟,则令牌不再有效。实际上用户必须重新登录才能获得新令牌。

所以回到你的问题,在令牌过期的那一刻,我的建议是你可以present the loginPage and tell user that he has to login again to use the app

不知道有没有其他方法可以获取新的token,如果有的话,使用可能不用重新登录,。

另外,我发现了一个可能有帮助的帖子:webapi-2-0-how-to-implement-refresh-jwt-token-when-access-token-expired

【讨论】:

感谢您的回答。实际上我不希望用户再次登录,会话已经保持活动状态,我只需要知道何时以及如何刷新令牌以避免用户在没有任何操作的情况下打开应用程序的情况。这将导致令牌过期,用户将无法执行任何调用。 如果用户在 5 分钟内调用任何 api,token 会刷新,对吧? 没错,这就是刷新token的大致思路。不知道它是否正确,但这就是它现在的实施方式。问题是如果用户在 5 分钟内没有进行任何操作。 我认为这个想法应该是使用 Timer 来计算时间并每隔 5 分钟自动重复调用一个 api,即使用户在 5 分钟内没有进行任何操作。如果您的应用中调用了任何其他 api,如果您可以重新启动 Timer 以重新计数会更好。 计时器对于移动应用来说是不是太贵了?我不知道这是否是一个好的做法,我会寻找它,谢谢

以上是关于Xamarin.iOS / Web API JWT 刷新令牌(如果过期)的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin iOS提交被拒绝,Call Kit功能/ API

Xamarin iOS 模拟器无法连接到 Rest API

如何使用 API 在 google map xamarin iOS 上更新 PIN 中的信息

Xamarin.iOS - 操作表行号

在另一个 Web API 中管理 Web API JWT 令牌的最佳实践

JSON Web 令牌(JWT)是如何保护 API 的?