【问题标题】:how to store 'client_secret' and 'client_id' on Android app when using OAuth?使用 OAuth 时如何在 Android 应用上存储“client_secret”和“client_id”?
【发布时间】:2017-07-23 01:45:51
【问题描述】:

我正在为现有网站开发一个 android 应用程序,所以我开发了一个 android 应用程序的登录部分,我使用 oAuth 协议。我有用于用户数据的 API,并从网站。所以我的问题是。

  • 如何存储此 client_idclient_secret(在移动应用程序或任何支持的客户端 Web 服务中)
  • 当我使用支持的客户端 Web 应用程序来存储客户端 ID 和秘密时,我如何验证用户。

基于 larevel php 框架构建的网站。

【问题讨论】:

  • 为什么不用string.xml来保存数据?
  • 不,这不是安全的方式.. 现在使用支持的 Web 客户端来存储数据.. 但我对它的工作原理没有正确的了解

标签: php android laravel oauth


【解决方案1】:

要回答您的第一个问题,请使用共享偏好。共享首选项允许您以键值对的形式保存和检索数据。 第二个问题,从共享首选项中读取并将结果发送回 Web 服务器。检查是否存在数据,然后获取值,对其进行验证并相应地传输。我建议使用这个很棒的库作为你的问题的奖励。retrofit2。

【讨论】:

  • 感谢您的帮助。我参考它..共享首选项是存储有价值数据的非常安全的方法吗?..不知道使用另一个后端客户端来存储客户端 ID 和其他东西。
  • 什么?我没有得到最后一部分。
  • 我的意思是将这些数据存储在另一个网站和应用程序与该网络应用程序的通信并交换令牌..
  • 你考虑过使用本地存储吗?
【解决方案2】:

如果您想在应用中安全地保存 id,您可以使用 Keystore。

KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());

// get user password and file input stream
char[] password = getPassword();

java.io.FileInputStream fis = null;
try {
    fis = new java.io.FileInputStream("keyStoreName");
    ks.load(fis, password);
} finally {
    if (fis != null) {
        fis.close();
    }
}

https://developer.android.com/reference/java/security/KeyStore.html

【讨论】:

  • @Michal 感谢您的宝贵意见,我会参考它。这是存储数据的非常安全的方式。任何人都可以解码 apk 并且可以轻松获取文件。不知道使用另一个背面结束网络客户端?
  • 这与保护 Play 商店中的应用程序免受假冒的机制相同。如果它不安全,那将是一个严重的问题。它是加密的。即使他们拥有密钥库,他们仍然需要密码。密码未保存在应用内。
猜你喜欢
  • 1970-01-01
  • 2021-05-29
  • 2021-02-02
  • 2017-10-20
  • 1970-01-01
  • 2016-02-10
  • 2013-11-02
  • 1970-01-01
  • 2016-07-16
相关资源
最近更新 更多