【问题标题】:Android + node js authentication安卓+节点js认证
【发布时间】:2017-01-13 16:21:29
【问题描述】:

我有一个节点 js 服务器和一个 android 客户端。基本上我有两个身份验证选项:rest api + http basic 或会话。我更喜欢会话,因为将用户凭据存储到手机内存中似乎不是一个好主意。会话 ID 是临时的,因此存储它不会是安全问题。

我尝试了以下方法:在节点 js 上,我使用的是 express-session 中间件。在客户端,会话 ID 存储在变量 SID 中。对于每个请求,都会设置 cookie“connect.sid=SID”。如果响应包含 set-cookie,则 SID 设置为匹配 connect.sid。但是,这种方法不起作用。但是,我可以生成自己的 id 而根本不使用 express。

另外,我不了解快速会话的浏览器行为。我正在使用 https,如果这有什么不同的话。它工作正常,但首先,所有请求都会创建 2 个操作:一个使用 OPTIONS 方法,另一个使用实际操作。对选项请求的响应返回 set-cookie。在实际操作请求中,设置了cookie“connect.sid”。在每个请求中,id 都是相同的,但是服务器返回的每个 set-cookie 都有不同的 id,并且客户端发送的 id 与这些 id 中的任何一个都不匹配。有人可以解释发生了什么吗?

如今,使用移动应用程序对服务器进行身份验证是一种非常常见的情况。推荐的处理方式是什么(没有第三方)?

【问题讨论】:

    标签: android node.js session authentication cookies


    【解决方案1】:

    有人可以解释发生了什么吗?

    我怀疑您在客户端(Android 应用)中的 cookie 处理实现可能是问题的原因。

    我使用 node.js 开发了一个 Android 应用程序,并且使用 RESTful API 看到了类似的问题。 就我而言,我使用了 Retrofit2 REST 库。这个库基于 OkHttp3 API 来处理 HTTP 请求/响应。为了解决我的 cookie 问题,我包含了答案 https://stackoverflow.com/a/34886860/7183182 中显示的代码,其中主要部分是 PersistentCookieStore 实现和 JavaNetCookieJar 类。如果使用 HttpURLConnection,则可以将 PersistentCookieStore 实现传递给 CookieManager。 Android 文档展示了如何使用特定的 CookieStore 实现 herehere

    如今,使用移动应用程序对服务器进行身份验证是一种非常常见的情况。推荐的处理方式是什么(没有第三方)?

    我建议使用 OAuth 解决方案,其中 API 密钥(或访问令牌)使用 SharedPreferences 存储在客户端。

    通过 cookie 传输的会话 id 是一种解决方案,但对于原生或混合移动应用程序来说存在问题。

    【讨论】:

      猜你喜欢
      • 2021-01-09
      • 2015-04-17
      • 1970-01-01
      • 2018-05-09
      • 1970-01-01
      • 2018-07-02
      • 1970-01-01
      • 1970-01-01
      • 2011-05-11
      相关资源
      最近更新 更多