从Android客户端管理服务器端身份验证

时间:2016-09-28 23:38:47

标签: android authentication express oauth passport.js

我已使用passport.js在我的Node.js服务器上设置了第三方OAuth身份验证。

它适用于浏览器。流程如下:

  1. 获取myserver.com/auth/instagram
  2. 的请求
  3. Passport会将我重定向到Instagram网站以登录
  4. 我输入我的凭据
  5. 我被重定向到回调网址,这是我的server.com/auth/instagram/callback
  6. 我做了进一步的处理,最后res.send(myAccessToken)给了客户。
  7. 我在Android中遇到麻烦。要键入第三方凭据,需要一个浏览器页面。但那么我将如何在我的应用程序中获得最终结果呢?

    选项1

    启动浏览器。

    Intent i = new Intent(ACTION_VIEW);
    i.setData(Uri.parse("https://myserver.com/auth/instagram"));
    startActivity(i);
    

    的问题:

    • 我无法轻松设置服务器所需的正确标头。
    • 我无法以编程方式阅读最终回复!该操作将提供给浏览器应用程序,该应用程序将结束并且永远不会通知我的应用程序。系统会向用户显示一个打印了myAccessToken的空白页。

    选项2

    使用一些http库连接。

    final Request request = createRequest()
            .url("https://myserver.com/auth/instagram")
            .get()
            .build();
    Response response = client.newCall(request).execute();
    

    的问题:

    • 不起作用!即使我设置okhttp来跟踪重定向,我也会得到一个指向某个Instagram网址的200响应。当然,用户永远不会被提示他的Instagram凭证,因为没有浏览器曾经打开过。

    如何处理?

    注意:

    • 我以Instagram为例,第三方服务与问题无关。我正在寻找一个通用的解决方案来接收我的Android应用程序中的结果回调。
    • 我不愿意实施客户端身份验证。我愿意触发步骤1.-5。来自我的Android应用程序,并在Java回调中收到最终结果。

0 个答案:

没有答案