我的公司正在构建一个 RESTful API,它将返回中等敏感信息(即财务信息,但不包括帐号)。我可以控制 RESTful API 代码/服务器,并且正在构建 Android 应用程序。我已经将 API 设置为使用 OAuth 2 和授权代码授予流程(带有客户端 ID 和密码),并且我自动批准用户而无需他们批准客户端,因为我们同时拥有客户端和提供者。我们将 CAS 用于 SSO,当用户登录以检索令牌时,我将其用于授权服务器作为 OAuth 2 过程的一部分。
我正在考虑各种方法来保护 Android 应用程序上的数据。我得出的结论是,在设备上存储客户端 ID 和机密肯定不会发生,但我认为存储身份验证令牌可能会起作用,因为它只会对个人用户造成风险(而且真的只有当他们碰巧有有根电话)。
这是我想到的两个选择。它们都要求我拥有一种受 CAS 保护的代理服务器,与 API 服务器共舞,并返回身份验证令牌。这消除了在应用程序代码中存储客户端 ID 和密码的需要。
这是我想出的:
1)要求用户在每次启动应用程序时输入密码才能访问数据。这绝对是最万无一失的方法。如果这样做了,为了方便起见,我可能想保存用户 ID,但在这种情况下,不能使用 CAS 登录(因为它是基于 Web 的)。我也许可以在后端使用无头浏览器将用户登录到 CAS 并根据他们在 Android 表单中输入的内容检索令牌,但这似乎很棘手。保存用户 ID 类似于 Chase 应用程序所做的(如果您碰巧使用这个) - 它保存用户 ID,但不保存会话之间的密码。
2) 将身份验证令牌存储在 Android 设备上。这有点不安全,但几乎是万无一失的。用户首次启动应用时,打开网页到返回token的代理服务器的CAS登录(类似https://developers.google.com/accounts/docs/MobileApps)。在用户登录并将令牌返回给应用程序后,对其进行加密并将其私有存储给应用程序。此外,使用 ProGuard 混淆代码,使加密算法更难逆向工程。我也可以在令牌刷新中工作,但我认为这更像是一种错误的安全感。
3) 不要使用 CAS,而是想出另一种方法来获取服务的身份验证令牌。
关于其他人如何实现类似场景的任何建议(如果已经完成)?
谢谢。