android - 应用程序如何在没有服务器的情况下代表用户访问 OAuth 服务(例如 Dropbox)?

标签 android ios server oauth-2.0 client

就 OAuth 访问而言,实现 Dropbox 或 GoogleDrive 或任何客户端(仅作为客户端且无需服务器)的正确/推荐方法是什么?

许多提供商(例如 Dropbox)不允许非 http/https 的 redirect_uri。在手机上,谷歌(和苹果?)似乎不允许除操作系统浏览器之外的 OAuth 请求(为了用户方便),这意味着应用程序捕获授权代码(不涉及服务器)的唯一方法oauth 是通过告诉操作系统它希望拦截诸如“http://localhost:9876/myapplication/”之类的 URI。如果没有需要服务器的复杂/复杂的设置(类似于 this ),则不可能拦截 http URI(操作系统将其重定向到浏览器)。

还有一个问题是必须告诉服务提供商我的应用程序并检索客户端 ID/ secret ,我必须在应用程序中对其进行硬编码。

有一种 OAuth 授权类型,我只需获取用户的用户名和密码并将其直接发送到服务器。这看起来很可疑,而且可能不会受到用户的欢迎。

正确的做法是什么?我是否需要运行服务器/服务才能创建仅作为这些服务的第三方门户的应用程序?

谢谢

最佳答案

一种解决方法(如 @gbazilio 的评论所建议)是通过调用 Web View 内的 oauth 端点来手动实现身份验证。为了使其与谷歌等服务提供商一起工作,谷歌会阻止 WebView 中的 oauth,只需将 oauth 请求中的用户代理 header 设置为某些移动浏览器用户代理,一切都会正常工作。

关于android - 应用程序如何在没有服务器的情况下代表用户访问 OAuth 服务(例如 Dropbox)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56778442/

相关文章:

android - Ionic 4/Cordova - 获取设备帐户

ios - AVRecorder 无法设置位深度

iphone - 本地化 iOS 项目的更好方法应该是什么?

javascript - 客户端 Firebase 云消息传递的安全性如何?

android - 如何通过电话关闭系统日志

java - 如何在 android webview 加载的网站中添加链接或按钮单击加载器

ios - Swift 3 Date 类型不作为自定义类的一部分进行编码

Java socketserver如何测试?

Java nextLine 在套接字上被阻塞

android - 如何在抽屉导航 Activity fragment 中正确使用谷歌地图 fragment