Authentication API设计–;是否可以获取用户';来自身份验证令牌的数据? 让我们考虑这个用例:

Authentication API设计–;是否可以获取用户';来自身份验证令牌的数据? 让我们考虑这个用例:,authentication,token,api-design,Authentication,Token,Api Design,1) 我使用用户名和密码调用我的API登录端点,并获取我的身份验证令牌,该令牌作为Authorization:Bearer添加到头的每个连续请求中 2) 我调用/current user端点,没有参数,只有授权头。服务器使用令牌授权用户,并从该令牌获取用户id。然后他在数据库中按id找到用户并返回其数据 我的问题是,这种方法是否不安全。我想知道,如果我是一名攻击者,正在使用随机生成的令牌调用/current user端点,该怎么办。一旦我偶尔匹配了真实的令牌,服务器就会将其他用户的数据返回给我

1) 我使用用户名和密码调用我的API登录端点,并获取我的身份验证令牌,该令牌作为
Authorization:Bearer
添加到头的每个连续请求中

2) 我调用
/current user
端点,没有参数,只有授权头。服务器使用令牌授权用户,并从该令牌获取用户id。然后他在数据库中按id找到用户并返回其数据

我的问题是,这种方法是否不安全。我想知道,如果我是一名攻击者,正在使用随机生成的令牌调用
/current user
端点,该怎么办。一旦我偶尔匹配了真实的令牌,服务器就会将其他用户的数据返回给我

是否有必要在客户端上存储用户id以及同时使用令牌和呼叫请求?例如,
/user?id=
带有授权头,并删除
/current user
端点?之后,服务器上的某种ACL将确定所使用的令牌是否允许访问传递了用户id的用户


(我还发现有JWT令牌,但我看到了同样的问题。作为攻击者,我会设法猜测其他用户的令牌,服务器会将其数据返回给我)

出于安全目的,通常假定攻击者知道用户id。例如,如果攻击者已经拥有或知道一个合法帐户,她可能能够猜测其他用户ID是如何分配的

另外,如果你的代币足够长并且完全是随机的,那么它实际上没有任何区别


这样看:假设您的令牌具有长度
n
,您的用户id具有长度
m
。如果没有用户id,攻击者必须猜测
n
个字符,其中包括
n+m
个字符。如果
n
足够高,则不需要这些额外字符。请记住,如果您的用户id不是完全随机的,则用户id的有效长度可能比其外观长度短得多,因此添加的
m
实际上可能非常小。

您是否可以使用数字签名令牌?您基本上可以使用客户端(或用户)的私钥加密令牌,然后使用服务器的公钥再次加密包和明文userid。这样,只有服务器才能解密包,一旦解密,它就知道用户是谁。然后,它可以使用与该用户ID关联的公钥对包进行解密并获取令牌


由于您没有提供有关应用程序以及所需认证速度或所使用技术的更多信息,因此很难提供更多信息。

Hm我明白了。所以我基本上让代币足够长。顺便说一句:不会是
n+m
,而是更多,因为他必须猜测组合,我想(?)谢谢你的回复!我也在考虑这样的令牌,但我推迟了它,因为我现在不想麻烦它的实现。我的问题更多地集中在API设计上,即该方法是否可行,以及在何种条件下。