android - OAuth2 不应该将用户重定向到外部浏览器,而不仅仅是将登录屏幕加载到 WebView

标签 android ios security oauth-2.0

在移动设备上处理 OAuth 的正确方法是什么?安卓、iOS 等.. 正如我所看到的,大多数应用程序只是将登录屏幕加载到 WebView 等应用程序内浏览器中。它实际上不是在践踏 OAuth 的整个原则吗?因为作为开发人员,我可以轻松读取用户在文本字段中输入的密码。有没有办法使用 startActivityForResult 模式(尤其是在 Android 上)做到这一点?因为当用户在主系统浏览器中输入他们的登录名和密码时,这应该是一种更可靠的方法来维护应用程序的安全性和可信度?

最佳答案

在应用和浏览器之间传递数据

您必须在用户登录后从页面读取响应(重新加载的 url),以获取用于请求身份验证和刷新 token 的授权代码。如果(默认)浏览器必须负责为您返回授权代码,那么它必须(记录)实现接收此类结果的此类 Intent 。

让浏览器知道您应用的凭据

还有另一个更严重的问题 - 通常您使用应用的凭据(客户端 ID + 客户端密码)请求授权/身份验证。您将它们作为参数放在 header 或 url 中的某个位置。您必须将它们提供给浏览器,以便将它们放入请求的 header /url 中。

合并:

当浏览器同时拥有授权码和您应用的凭据时,它可以获得用户帐户的授权/刷新 token ,不仅可以访问它,还可以伪装成您的应用。考虑到这是设备附带的内置浏览器,用户会很平静,因为他可能会信任制造商,因为他正在购买它的设备,但应用程序的开发人员可以信任制造商吗?当用户选择第 3 方浏览器作为默认浏览器和/或卸载内置浏览器时?

简而言之:

用户和开发者都必须信任第 3 方——浏览器,而不是用户信任他/她安装的应用程序

关于android - OAuth2 不应该将用户重定向到外部浏览器,而不仅仅是将登录屏幕加载到 WebView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19589359/

相关文章:

android - 为平板电脑设计 Android 应用程序

android - 向用户收取可变金额

ios - 'xxx' 没有可见的 @interface 声明选择器 'init:'

ios - 越狱设备中的钥匙串(keychain)数据安全性

Android Studio xml 未将 png 转换为可绘制对象

android - 文件保存 Intent ,如共享 Intent Android/iOS react-native

security - 我为什么要关心散列密码呢?

security - API 安全问题 : SSL or more?

apache - Modsecurity & Apache : How to limit access rate by header?

php - 构建用于在 Android 平板电脑上运行 PHP 和 MySQL 的 Android 应用程序