android - 使用 OAuth2 安全验证移动访问的选项

标签 android ios security oauth oauth-2.0

我们目前正在实现 OAuth2 以保护我们的新 API,但不确定如何安全地提供所需的功能。我们需要允许移动设备执行以下操作:

Immediately after downloading the app the user is able to take a picture and submit it without having to first log in.

虽然我们希望允许匿名用户访问,用户无需登录或注册即可使用某些功能,但我们不想允许未经身份验证的 API 访问。这通常可以使用 client credentials authorization flow 来完成。获取应用程序访问 token ,但这需要知道客户端 secret 。据我所知,移动设备不被视为受信任的客户端,不应包含客户端 secret ,因此不应该能够自行生成应用程序访问 token 。

我们已经提出了一些选项来完成这个要求,但希望对它们有一些意见:

  1. 将客户端 key 嵌入到应用中。从安全的角度来看似乎并不理想,但也许我们缺少一种明显的保护它的方法?我们至少针对 iOS 和 Android。
  2. 离线生成应用访问 token 并将其嵌入到应用中。仍然不是很安全,但至少 secret 没有暴露。
  3. 允许仅使用客户端 ID 而不是访问 token 来访问某些功能。这可能是最简单的,但它引入了不一致性并且需要多种方式来验证客户端。
  4. 构建并使用配套网络应用为移动应用生成应用访问 token 。表面上看起来是赢家,但现在您必须安全访问配套应用!

您如何在不要求用户先登录的情况下使用 OAuth2 从移动设备安全地验证对 API 的访问?

最佳答案

同意对问题的评论。要么:

1.) 在 OAuth 2 中使用客户端凭证授权类型 - 在您的应用程序中嵌入 secret 。明白这不是 super 安全,最终会有人对其进行逆向工程。理想情况下,每个客户端都会获得一个唯一的 secret - 这样您就可以在他们滥用其使用权时撤销客户端。

2.) 接受开放的 API - 因此根本不需要 OAuth 2 访问 token 。也许只有您的应用知道该 API - 但同样,有人对其进行逆向工程只是时间问题。

关于android - 使用 OAuth2 安全验证移动访问的选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8389134/

相关文章:

android - 如何发布具有远程依赖项 (gradle) 的 Android 库 (aar)?

java - 线程联网导致空指针异常

ios - 如何在我的应用程序中获取 "Storage almost is full"通知

ios - 应用程序运行时在后台下载和刷新数据

ios - GKMatchmakerViewController - 如何检测按下 "Play Now"

android - 如何在 Android 中安全地存储访问 token 和 secret ?

android - RxJava2 JUnit 测试

android - 以编程方式更改语言(Android N 7.0 - API 24)

api - 安全性:两个应用程序通过 API 进行处理

php - 使用 PHP 和 MySQL 进行密码保护