如何处理本机反应中的 OAuth2 令牌刷新?

Gus*_*lin 4 security fetch oauth-2.0 react-native

是否有任何用于处理令牌刷新的本机反应库?或者我需要制定刷新令牌的时间表?如果是,iOS 允许日程在后台执行吗?或者我可以检查每个服务器响应,如果令牌有效,如果不刷新它?

实现这一点的最佳方法是什么?

Côt*_*nde 5

当我遇到这个问题时,我想到了两种使用 API 处理令牌刷新的策略:

1 - 刷新 API 中的特定错误

您的服务器应该发送一个INVALID_TOKEN_ERROR您可以制作自己的refreshToken(credentials).

我觉得有趣的一项技术fetch是以与本文中类似的方式进行 polyfill : 使用 fetch() 处理失败的 HTTP 响应

2 - 在应用程序启动时刷新

我现在在我的应用程序上所做的是在应用程序启动时刷新我的令牌,而不管令牌的存活时间。因此,除非您的用户打开应用的时间比您的生存时间长,否则您应该不会遇到任何问题。

我使用redux-persist加载状态回调挂钩应用程序启动。

refreshToken(凭据)

如果您使用,刷新令牌功能非常简单fbsdk

import { AccessToken } from 'react-native-fbsdk'

[...]

AccessToken.refreshCurrentAccessTokenAsync()
    .then((FBTokenObject) => {
        let FBToken = FBTokenObject.accessToken
        [refresh your own API token using FBToken]
     )
Run Code Online (Sandbox Code Playgroud)

如果您使用电子邮件和密码策略,您应该查看react-native-keychain,以安全的方式将凭据保存在设备上。

结论

我没有在 API 错误时实现令牌刷新,因为我的令牌的生存时间是 5 天,我认为目前第二种策略已经足够好了。但如果我的代币的生存时间少于 2 天,我肯定会。

您还可以通过检查您的生存时间并根据价值决定是否要刷新令牌来提高性能,但是,在我看来,这并不是什么收获。