背景
我正在对具有登录功能的应用程序执行一些测试。客户端登录服务器,服务器向其发送身份验证令牌和用户ID。客户端在下次请求中使用令牌和用户ID来验证自身。
我对这些登录会话的工作原理并不熟悉。我对需要确认的一件事情感到困惑。
问题:
应用程序的工作方式是在HTTP请求中发送令牌和用户ID以从服务器检索敏感数据,但在某些请求中,只发送用户ID以检索敏感数据。
令人困惑的是,服务器需要知道它正在与经过身份验证的客户端进行通信。服务器通常使用会话ID或会话令牌对其进行验证。当我的客户端应用程序只发送“用户ID”时,为什么服务器响应它,并为其提供敏感数据......
在某些应用中,我看到会话ID和用户ID都具有相同的值(单独的实体但具有相同的值),因此可能在我的应用中“用户ID”代表“会话ID”。但是为什么服务器会同时发送会话令牌和会话ID ...所以,我的问题是
服务器是否可以发送会话令牌和会话ID,或者他们必须(或大部分)只发送其中一个?
我的主要问题是上面的问题,以下是第二个问题:
“会话ID”和“用户ID”通常是相同还是不同?如果这些不同,那么用户ID是一些会话变量还是与会话无关的东西,例如服务器数据库中的用户ID?
P.S。:我不确定这个问题是不是正确的网站。如果需要将其移动到其他堆栈交换站点,请告诉我。
答案 0 :(得分:1)
回答问题:
您可能会对会话ID所扮演的角色感到困惑。会话ID和令牌是一回事。会话ID /令牌允许服务器执行某种查找,这将指示此会话令牌的请求正由该用户执行"。因此,您不需要同时发送用户ID和会话令牌。
您可能没有要求的更多信息:
会话令牌确实存在一些安全问题。它们必须相当独特,并且只能通过https进行通信。此外,请记住,客户端很容易修改其Cookie。因此,如果发送用户ID和会话令牌,如果应用程序盲目地接受用户id令牌,则用户可以登录,获取会话令牌,然后将其用户ID更改为他们希望的某个不幸用户冒充。
现在,也许您正在考虑身份验证令牌?会话令牌可以被认为是身份验证的子集。它们基于服务器具有客户端无权访问的秘密。有几种方法可以做到这一点,要么创建一个合理的唯一值,要么存储一些额外的信息,要么只对服务器可以解密的值进行一些加密。