4

GitHub 上的GitkitDemo

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

在Validating OAuth2 token getting 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(idToken.split(".")[0]在 Python 中)的第一部分(“令牌”)吗?还是有效载荷 ( idToken.split(".")[1])?或者也许创建 idToken 的 SHA1?编辑:好的,我意识到使用 JTW 标头会很愚蠢,但是有效负载至少有几个变量(iat并且exp可能还有user_id),但是签名?

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

4

1 回答 1

2

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

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

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

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

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

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

于 2015-08-10T18:24:25.700 回答