【发布时间】:2014-10-25 21:14:45
【问题描述】:
我正在开发一个实际上由两个应用程序组成的网络应用程序。一个应用程序称为account,它处理与用户帐户相关的所有事情,例如帐户的身份验证、注册和管理。我还有一个应用程序,我们只需调用web。
问题是account 使用 SSL/TLS 监听 https://account.domain.com,而网络监听 http://www.domain.com。
我有哪些选项可以让人们登录并验证account.domain.com,然后将他们重定向到他们实际登录的www.domain.com。据我所知,您无法在account.domain.com 然后让它在 domain.com 上运行,因为这会带来安全风险。
关于我的应用程序的一些背景细节:
用 Go 编程语言编写。
将 Gorilla Toolkit 用于大多数 HTTP/HTTPS 接口、URL 路由和处理 POST/GET 参数。
两个应用程序都存在于同一个虚拟服务器上。
我正在寻找一种安全的方式来验证和管理跨所有子域和实际域domain.com 的会话。我对这个主题不是特别精通,所以除了设置cookie之外,我知道的不多。
【问题讨论】:
-
为什么您认为您无法从域 account.domain.com 中设置 domain=domain.com 的域 cookie?只要浏览器接受 domain.com 作为 ETLD+1(参见 publicsuffix.org),它就可以工作。
-
我不完全确定公共后缀是什么或它是如何工作的,但是深入研究它听起来并不是所有主要浏览器都支持这一点。我需要至少适用于最新版本的 IE、Firefox、Opera、Chrome 和 Safari 的东西。
-
这可能无法回答您更广泛的会话管理问题,但您应该能够从anything.domain.com 在.domain.com 上设置cookie——不会出现有关公共后缀列表的详细信息上面这儿。只需确保 Cookie.Domain 是 .domain.com,而不是 www.domain.com。 (这看起来更像是一个浏览器/HTTP/JavaScript 问题,而不是一个 Go 问题。)
-
这里真正的问题是,在两个域中使用 cookie(这意味着
Secure: false)是攻击者(坐在咖啡馆或利用 XSS 漏洞利用的人)可以轻松修改(MITM ; cafe) 或读取 (XSS, ifHttpOnly: True) cookie 内容。因此,请绝对确保您没有存储任何关键或仅用于识别权限的内容。最好将www.domain.com也放在 TLS/SSL 后面。 -
如果有人读取会话 ID 会发生什么?还是移动设备上的用户通过隧道?
标签: authentication go cross-domain