在iOS和Rails API应用程序中,将令牌和密码存储在iOS钥匙串中是否可行?

3

我正在使用Rails后端构建一个iOS应用程序。

对于认证,我正在使用名为devise_token_auth的rails gem。 https://github.com/lynndylanhurley/devise_token_auth

在注册或登录后,我将access-token、client-id和email存储在iOS钥匙串中。

然而,出于安全原因,token应该在2周后过期,所以iOS用户应该每2周重新登录。

我猜,在这种情况下,你可以使用refresh-token,但不幸的是,我无法从devise_token_auth gem中找到refresh-token。

那么,在这种情况下,将用户密码存储在iOS钥匙串中以便在token过期时自动重新登录,是否可行?或者将密码存储在钥匙串中是一个坏主意,应该避免?

如果将密码存储在钥匙串中以避免每2周从移动应用程序登录不是一个好的做法,那么有没有推荐的refresh-token可以使用?

我想知道是否可以使用此jwt gem进行refresh-token。 https://github.com/nsarno/knock

2个回答

6
通常我会同意@nsarno的观点,但在这种情况下我不同意。是的,在设备上存储关键数据是不好的做法,如果可能的话应该始终避免。但是Keychain就是为此目的而建立的。只有在设备通过生物识别认证或PIN解锁后,密码/令牌才能被您的应用程序(或入侵者)访问。
请参阅https://developer.apple.com/documentation/security/keychain_services,其中解释了所有必要的功能。

3
存储用户凭证是一种不好的做法,应该避免。这会破坏通过使令牌过期来使应用程序更加安全的目的。
为了避免在使用应用程序时令牌过期的常见问题,您可以实现滑动会话。其思想是在用户进行每个经过身份验证的操作时发送一种新的短期令牌。只要用户活动,他就会保持已验证状态。
仅当用户处于非活动状态超过过期时间(此处为2周)后才需要再次输入凭据,我认为这很有意义。
您还可以查看knock中正在讨论滑动会话和刷新令牌的问题

谢谢,你的回答真的很有用,帮了我很多! - Umeumeume
1
除了滑动会话之外,还有哪些方法?或者这是与移动应用程序进行API交互的最常见方法吗? - user805981

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接