Java 如何在HTTP删除请求中传递身份验证详细信息?

Java 如何在HTTP删除请求中传递身份验证详细信息?,java,rest,http,authentication,http-method,Java,Rest,Http,Authentication,Http Method,我试图创建一个遵循HTTP方法语义的RESTAPI,但是我被DELETE方法卡住了 在我的用例中,服务位于对用户进行身份验证的网关后面。此服务使用SSO令牌,然后用于验证用户并获取其详细信息。从这一点上讲,我试图调用我的服务,在这里我使用我想要删除的资源的id作为路径变量,但是我不知道如何传递用户id进行验证 我读过很多关于在DELETE方法中添加主体的问题的帖子。我还认为添加自定义标题来标识用户不是正确的方法。在我的选择中,我认为只有两个是合理的: 发出以用户id作为正文的POST请求。我不喜

我试图创建一个遵循HTTP方法语义的RESTAPI,但是我被DELETE方法卡住了

在我的用例中,服务位于对用户进行身份验证的网关后面。此服务使用SSO令牌,然后用于验证用户并获取其详细信息。从这一点上讲,我试图调用我的服务,在这里我使用我想要删除的资源的id作为路径变量,但是我不知道如何传递用户id进行验证

我读过很多关于在DELETE方法中添加主体的问题的帖子。我还认为添加自定义标题来标识用户不是正确的方法。在我的选择中,我认为只有两个是合理的:

  • 发出以用户id作为正文的POST请求。我不喜欢这一个,因为我基本上是使用带有已识别资源的POST,而且我觉得语义上是错误的
  • 发出请求,使用户id成为路径变量。看起来是这样的。路径/to/service/resourceId/{resourceId}/userId/{userId}。我的问题是,在POST和PUT请求中,用户ID是主体的一部分。API看起来不一致,但我想我仍然可以更改其他2个,因此用户id也是url的一部分

  • 有什么建议吗?

    也许是HTTP身份验证?这就是为什么,不是吗?请参阅RFC 7235。

    您应该使用HTTP头参数来传递用户令牌

    @DELETE
    @Path("/{id}")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public Info deleteInfo(
            @HeaderParam("Authorization") String token,
            @PathParam("id") Long id){
    }
    

    认证在网关级别完成,通信从DMZ完成,即网关所在的位置,到我需要用户ID的内部应用程序。老实说,我不太熟悉内部公司网络中的安全约束,但我猜在调用的每个微服务中进行身份验证不会很有效。当用户已经获得授权时,这仍然适用吗?在我的例子中,我需要userId的原因是验证资源是否真的属于他,就像存储数据的终端应用一样。所以我认为在这种情况下,不是授权,而是验证资源1属于用户1而不是用户2。这是否就是为每个应用程序和方法传递客户端详细信息以进行验证的方法?像他的id这样的客户端信息是否与他发出GET请求以从应用程序获取所有资源时一样不是有效的路径变量?(如path/to/app/user/{userId})身份验证=登录+密码(您是谁)授权=权限(您可以做什么)-。在我的应用程序中,我使用包含用户名和密码的JSON主体的POST登录,它返回稍后在header param中使用的令牌。您是对的,这是用户的授权。在这种情况下,我将坚持这一点。谢谢