为什么要用会话令牌替换GITkit.idToken?

时间:2015-08-08 22:03:30

标签: session google-identity-toolkit

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获得的令牌的后端服务器令牌验证似乎足以确保拥有可以添加到Android客户端的有效安全令牌与后端进行任何后续通信时的标题。

那为什么要向you should exchange the idToken for either a Session Token or Cookie from your server提出建议?

这是由于idToken的大小(几乎1KB,IIRC)?

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

是否有任何其他论据反对将idToken用作会话令牌而不是大小?

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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

3)目前,Google Identity Toolkit IdToken将在两周后过期。

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

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