Java spring中id为的安全端点
我有一个关于春季安全的问题。假设我有这样的端点Java spring中id为的安全端点,java,spring,spring-boot,spring-security,Java,Spring,Spring Boot,Spring Security,我有一个关于春季安全的问题。假设我有这样的端点 /orders/order/{userId} 当我有多个登录用户并且有人可以键入另一个登录用户的userId时,如何防止这种情况。比如说 用户1具有id=1 用户2拥有id=2 现在用户_2只需输入用户_1的id,检索或删除他的订单。我是否应该检查每个请求的URL id是否等于当前登录的用户,或者是否有更好的方法使用spring security实现这一点?。当我在URL模式中使用用户名而不是用户id时,也会出现相同的情况,例如 /order
/orders/order/{userId}
当我有多个登录用户并且有人可以键入另一个登录用户的userId时,如何防止这种情况。比如说
用户1具有id=1
用户2拥有id=2
现在用户_2只需输入用户_1的id,检索或删除他的订单。我是否应该检查每个请求的URL id是否等于当前登录的用户,或者是否有更好的方法使用spring security实现这一点?。当我在URL模式中使用用户名而不是用户id时,也会出现相同的情况,例如
/orders/order/{username}
你有任何认证吗?
用户登录后,您可以使用令牌(例如JWT)处理他/她的id,并将URL中的id与令牌中编码的id进行匹配,尽管此时URL中的id变得无用。当用户使用其凭据登录时,我们通常会为其生成唯一令牌并将其发送给客户端。然后,客户机发送该令牌以请求进一步验证服务器端的用户。您可以创建并使用Utils类来生成令牌和验证用户。当用户在
/orders/order/{userId}
发出请求时,获取userId并将其与令牌中的userId映射。如果有效,则执行所需操作或给出响应401/403
(我在这里以JWT令牌为例)
是的,我有基于JWT的身份验证。所以我应该将用户id存储在令牌中,然后当我对特定用户进行身份验证时,我应该将编码的id与url请求中的id进行比较?正如Ronald Hund所写:如果传递JWT令牌,那么就不需要在url中发送用户id
public String getUsernameFromToken(String token) {
return getClaimFromToken(token, Claims::getSubject);
}
public String generateToken(User user) {
return doGenerateToken(user.getEmail() , user.getRole());
}