我正在构建一个跨平台移动应用程序(使用 Xamarian 工具、MonoTouch / MonoDroid)。我正在尝试完成身份验证工作流程,但遇到了绊脚石。我已经到处寻找一个明确的答案,但还没有找到。
这是我当前设置的概述。
我有一个用 nodejs 构建的网站。我使用 passport.js 在网站上进行 oAuth 登录。这很好用,用户可以使用 Twitter 或 Facebook 登录我的网站。
现在我想将同样的登录功能扩展到我的移动客户端。
我看到 2 个选项
在移动客户端中嵌入应用程序 ID 和应用程序密码,并从移动应用程序直接向 FB 或 Twitter 进行 oAuth 调用
通过我现有的 nodejs Web 服务器代理 oAuth 调用(将密钥保存在服务器上)
选项 2 似乎是首选方式(因为它避免了在移动应用程序中“传送”秘密)。
我有代理方法主要工作。
- 我在我的移动客户端中打开一个 WebView 并将其指向
http://mysever/auth/twitter
- 这将贯穿我现有的 passport.js 代码,并将移动 WebView 重定向到 Twitter 登录页面。
- 然后,用户在设备上的推特网页上输入他们的信用。
- Twitter 然后调用我的 oAuth 回调 URL(这是我的 nodejs 网络服务器)。
- 我的服务器和 Twitter 处理获取用户个人资料信息的第四次握手(据我了解,这是这种方法的关键,我的服务器和 Twitter 处理握手,移动客户端无需执行任何操作或通过此过程中的任何令牌)
这是我的问题:
正是这最后一步让我难过。在我的服务器上完成握手后,我在服务器上就有了我需要的用户信息,并且需要将其发送回移动客户端应用程序
我无法在 WebView 控件中找到任何方法来获取响应对象并获取 cookie 或标头值(例如)(这对于 Android 和 iOS 来说似乎是正确的)。我不认为它是特定于平台的。我想我正在尝试做一些移动平台中的 WebView 小部件不支持的事情。这让我觉得我错过了一些明显的东西。
我唯一想出的就是让我的网络服务器将移动客户端浏览器“重定向”到一个在查询字符串中包含用户信息的虚假 URL。类似 myapp://info?userid=1234
然后在移动应用程序中,我可以劫持 URL 加载并获取此 url 并获取我需要的数据。然后,我可以存储此用户信息,关闭 WebView 控件并转到我的移动应用程序中的本机屏幕,并在对我的 nodejs 服务器的任何后续 REST 调用中使用用户信息,作为识别用户的一种方式。
由于多种原因,这非常笨拙。其中最大的原因是 url 是通过未加密的线路发送的,并且所有数据都是纯文本的。
必须有更好的方法将数据从 Web 服务器返回到移动客户端?
还是我做错了?