代码之家  ›  专栏  ›  技术社区  ›  Daniel F

为什么要使用GITkit。idToken是否被会话令牌替换?

  •  4
  • Daniel F  · 技术社区  · 10 年前

    这个 GitkitDemo on GitHub

    现在使用idToken为用户创建会话。为此,您 应将idToken交换为会话令牌或Cookie 您的服务器。最后,保存要维护的会话令牌或Cookie 您的用户会话。

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

    那么为什么有人建议 you should exchange the idToken for either a Session Token or Cookie from your server ?

    这是因为idToken的大小(几乎1KB,IIRC)吗?

    生成这样的会话令牌有哪些建议(最简单和最安全的方法)?

    除了大小之外,是否还有其他反对将idToken用作会话令牌的理由?

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

    由创建的令牌/cookie gitkit.js (“gtoken”)是idToken本身,是否也应该用会话令牌替换它?

    1 回复  |  直到 9 年前
        1
  •  2
  •   Jin Liu    10 年前

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

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

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

    3) 目前,谷歌身份工具包IdToken将在两周后到期。

    除了这些考虑,IdToken作为会话令牌是足够安全的。确保不要使用IdToken的任何子部分作为会话cookie,因为攻击者很容易创建一个假的。

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