android - 应用程序如何在没有服务器的情况下代表用户访问 OAuth 服务(例如 Dropbox)?
问题描述
就 OAuth 访问而言,实现 Dropbox 或 GoogleDrive 或任何客户端(仅作为客户端且没有服务器)的正确/推荐方法是什么?
许多提供商(例如 Dropbox)不允许使用不是 http/https 的 redirect_uri。在手机上,谷歌(和苹果?)似乎不允许 OAuth 请求,除非来自操作系统的浏览器(为了用户方便),这意味着应用程序从oauth 是通过告诉操作系统它希望截取这样的 URI 来截取诸如“ http://localhost:9876/myapplication/ ”之类的 URI。如果没有需要服务器(类似这样的东西)的复杂/涉及的设置,就不可能拦截 http URI(操作系统将其重定向到浏览器)。
还有一个问题是必须将我的应用程序告诉服务提供商并检索客户端 id/secret,我必须在应用程序中进行硬编码。
有一种 OAuth 授权类型,我只需获取用户的用户名和密码,然后直接将它们发送到服务器。这似乎是可疑的,并且可能不受用户的欢迎。
正确的方法是什么?我是否需要运行服务器/服务才能创建只是这些服务的第三方门户的应用程序?
谢谢,
解决方案
一种解决方法(正如@gbazilio 的评论所建议的那样)是通过在 web 视图中调用 oauth 端点来手动实现身份验证。为了使其与 google 等服务提供商一起工作,它会阻止 webviews 中的 oauth,将 oauth 请求中的 user-agent 标头设置为某些移动浏览器用户代理,一切都会正常工作。
推荐阅读
- spring - Keycloak/OpenID:代表客户端应用程序请求用户信息
- annotations - 智能字段注释 - valuehelp 下拉菜单 - 不显示描述
- ios - 使用 RequestPermissionAsync 请求相机权限时,Xamarin iOS 应用程序崩溃
- python - Python selenium web 抓取数据到 csv 导出
- date - MS Access:将日期“2020 年 12 月 3 日”导入“日期/时间”列会出错,我如何让它识别出它是一个日期?
- python - 如何使导入的变量透明地调用函数
- reactjs - 如何从 Reactjs 网站复制导航
- javascript - 猫鼬(建造者模式)链式方法如何在幕后工作
- kotlin - Kotlin 聚合连续列表元素
- python - 为什么当我用 K-means 进行 4 个聚类时,我只有一个 intertia 而不是 4 个?