服务器可以向客户端发送会话令牌和会话 ID 吗?

Can a server send to client both session token and session id?

背景:

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

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

问题:

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

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

在某些应用程序中,我看到会话 ID 和用户 ID 都具有相同的值(不同的实体但具有相同的值),所以可能在我的应用程序中 "user id" 代表 "session id"。但是为什么服务器会同时发送会话令牌和会话 ID...所以,我的问题是
服务器能否同时发送会话令牌和会话 ID,或者它们必须(或大多数情况下)只发送其中之一?

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

P.S.: 我不确定这个问题的网站是否正确。让我知道是否需要将其移至其他堆栈交换站点。

回答问题:

您可能对会话 ID 扮演的角色感到困惑。会话 ID 和令牌是一回事。会话 id/token 允许服务器执行某种查找,这将指示 "requests with this session token are being performed by this user"。所以您不需要同时发送用户 ID 和会话令牌。

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

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

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