【问题标题】:Why should the GITkit.idToken be replaced by a Session Token?为什么要将 GITkit.idToken 替换为 Session Token?
【发布时间】:2015-11-01 03:45:12
【问题描述】:

GitkitDemo on GitHub

现在使用 idToken 为您的用户创建会话。为此,您 应将 idToken 交换为来自的 Session Token 或 Cookie 你的服务器。最后保存Session Token或者Cookie来维护 您的用户的会话。

在问题 Validating OAuth2 token obtained on Android device via Google Identity Toolkit (GitkitClient) on 3rd-party backend (custom python backend, non-gae)? 的答案的示例代码中,通过 Android 获得的令牌的后端服务器令牌验证似乎足以确保拥有一个有效、安全的令牌,该令牌可以在期间添加到 Android 客户端标头中与后端的任何后续通信。

那么为什么会有you should exchange the idToken for either a Session Token or Cookie from your server的推荐呢?

这是因为 idToken 的大小(差不多 1KB,IIRC)吗?

存在哪些建议(最简单和最安全的方式)来生成此类会话令牌?

除了大小之外,还有其他反对使用 idToken 作为 Session Token 的论据吗?

会话令牌可以是 idToken(Python 中的 idToken.split(".")[0] )的第一部分(“令牌”)吗?还是有效载荷 (idToken.split(".")[1])?或者也许创建 idToken 的 SHA1? 编辑: 好的,我意识到使用 JTW 标头会很愚蠢,但有效负载至少有几个变量(iatexp,可能还有 user_id),但是签名呢?

gitkit.js ("gtoken") 创建的令牌/cookie 是 idToken 本身,是否也应将其替换为会话令牌?

【问题讨论】:

    标签: session google-identity-toolkit


    【解决方案1】:

    建议使用您自己的会话令牌/cookie 有几个原因:

    1) 大多数现有的 Web 服务器框架都有自己的会话管理机制(带有过期时间的 cookie 生成等)。常见的做法是生成一个随机字符串作为会话 ID,并将服务器端用户活动与会话 ID 相关联。服务器然后指示浏览器设置会话 id 的 cookie。替换该机制是不必要的,有时甚至非常困难。

    2) 正如您所提到的,IdToken 比普通会话 cookie 大得多。

    3) 目前 Google 身份工具包 IdToken 将在两周后过期。

    除了这些考虑之外,IdToken 作为会话令牌足够安全。确保 - 不要 - 使用 IdToken 的任何子部分作为会话 cookie,因为攻击者可以轻松创建一个假的。

    如果您的服务器发出自己的会话 cookie,您应该在用户会话终止后删除 gtoken,以便 gitkit.js 的登录按钮状态与您的服务器保持同步。

    【讨论】:

      猜你喜欢
      • 2022-08-03
      • 2017-05-31
      • 1970-01-01
      • 2015-10-04
      • 2021-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多