【问题标题】:Can a server send to client both session token and session id?服务器可以向客户端发送会话令牌和会话 ID 吗?
【发布时间】:2015-05-13 23:51:36
【问题描述】:

背景:

我正在对具有登录功能的应用程序执行一些测试。客户端登录服务器,服务器向它发送一个身份验证令牌和一个用户 ID。客户端在下一个请求中使用令牌和用户 ID 来验证自己。

我不太熟悉此类登录会话的工作原理。我对需要确认的一件事感到困惑。

问题:

应用程序的工作方式是在 HTTP 请求中发送令牌和用户 ID 以从服务器检索敏感数据,但在某些请求中仅发送用户 ID 以检索敏感数据。

令人困惑的是,服务器需要知道它正在与经过身份验证的客户端交谈。服务器通常使用会话 ID 或会话令牌对其进行验证。当我的客户端应用程序只发送“用户 ID”时,为什么服务器会响应它,并给它敏感数据......

在某些应用程序中,我看到会话 ID 和用户 ID 具有相同的值(单独的实体但具有相同的值),因此在我的应用程序中,“用户 ID”可能代表“会话 ID”。但是为什么服务器会同时发送会话令牌和会话 ID...所以,我的问题是
服务器可以同时发送会话令牌和会话 ID,还是必须(或大部分)只发送其中一个?

我的主要问题是以上一个,以下是次要问题:
“会话 ID”和“用户 ID”通常相同还是不同?如果这些不同,那么用户 id 是某个会话变量还是与会话无关的东西,例如服务器数据库中的用户 id?

P.S.:我不确定它是否适合这个问题。让我知道它是否需要移动到其他堆栈交换站点。

【问题讨论】:

    标签: session session-variables


    【解决方案1】:

    回答问题:

    您可能对会话 ID 所扮演的角色感到困惑。会话 ID 和令牌是一回事。会话 ID/令牌允许服务器执行某种查找,这将指示“具有此会话令牌的请求正在由该用户执行”。所以你不需要同时发送用户 ID 和会话令牌。

    您可能没有要求的更多信息:

    会话令牌确实存在一些安全问题。它们必须是相当独特的,并且只能通过 https 进行通信。另外,请记住,客户端很容易修改其 cookie。因此,如果发送了用户 ID 和会话令牌,如果应用程序盲目地接受用户 ID 令牌,那么用户可能会登录,获取会话令牌,然后将他们的用户 ID 更改为他们希望的某个不幸的用户冒充。

    现在,也许您正在考虑身份验证令牌?会话令牌可以被认为是身份验证的子集。它们基于服务器具有客户端无权访问的秘密。有几种方法可以做到这一点,要么创建一个合理唯一的值并将其与一些额外信息一起存储,要么对一个只有服务器才能解密的值进行加密。

    【讨论】:

    • 感谢您的回复!我需要澄清一些事情。所以,我理解会话令牌/ID和用户ID是两个不同的东西,令牌帮助服务器识别用户,这也可以通过“用户ID”来实现。因此,服务器不需要同时发送令牌和用户 ID,但在我的情况下,它同时发送它们。这里的token是auth token。客户端在请求中发送身份验证令牌以进行身份​​验证。令牌告诉服务器请求是活动登录会话的一部分,应该响应。那么为什么服务器要响应仅带有用户 ID 的请求呢?
    • 这是开发人员接受仅包含用户 ID 而没有身份验证令牌的请求的正确/安全实现吗?服务器如何知道这个 HTTP 请求是活动登录会话的一部分?用户 ID 本身是否被视为身份验证指标?请注意,在我的情况下,即使用户已注销,也接受带有用户 ID 的请求...
    • 这确实是特定于应用程序的,如果“用户 ID”足够安全,可以合理地验证用户是他们所说的那个人,那么一切都会好起来的。但是,这实际上取决于实现。例如,如果用户 id 只是散列后的 id,它是使用 SHA 和盐进行散列还是使用易受攻击的算法(如 MD5)进行散列。听起来你手上可能有一个潜在的错误,应该合理地举起旗帜来引起注意,至少是为了你自己的想法。
    猜你喜欢
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 2018-03-25
    相关资源
    最近更新 更多