首页 > 解决方案 > 应用程序如何在没有服务器的情况下代表用户访问 OAuth 服务(例如 Dropbox)?

问题描述

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

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

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

有一种 OAuth 授权类型,我只需获取用户的用户名和密码,然后直接将它们发送到服务器。这似乎是可疑的,并且可能不受用户的欢迎。

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

谢谢,

标签: androidiosserveroauth-2.0client

解决方案


一种解决方法(正如@gbazilio 的评论所建议的那样)是通过在 web 视图中调用 oauth 端点来手动实现身份验证。为了使其与 google 等服务提供商一起工作,它会阻止 webviews 中的 oauth,将 oauth 请求中的 user-agent 标头设置为某些移动浏览器用户代理,一切都会正常工作。


推荐阅读