gpt4 book ai didi

java - 如何保护 Spring Data REST 关联请求的安全?

转载 作者:行者123 更新时间:2023-11-30 05:43:06 25 4
gpt4 key购买 nike

我使用 Spring Data REST 创建了 REST API。我有实体 UserPost,其中 User 可以有多个帖子(一对多)。现在我需要向我的用户添加帖子。但我需要 userA 不能删除或更新 userB 的帖子。

API结构

{
"_links": {
"users": {
"href": "http://localhost:8081/api/users{?page,size,sort}",
"templated": true
},
"posts": {
"href": "http://localhost:8081/api/posts{?page,size,sort}",
"templated": true
}
"profile": {
"href": "http://localhost:8081/api/profile"
}
}
}

用户结构

{
"id": 1,
"username": null,
"password": null,
"_links": {
"self": {
"href": "http://localhost:8081/api/users/1"
},
"user": {
"href": "http://localhost:8081/api/users/1"
},
"posts": {
"href": "http://localhost:8081/api/users/1/posts"
}
}
}

有多种方法可以添加相关实体抛出链接。使用 PUT 方法和 text/uri-list 内容类型:

PUT /api/posts/1/user? HTTP/1.1
Host: localhost:8081
Content-Type: text/uri-list
Authorization: Bearer 270c6dc3-04a5-48cc-b42e-c275472df459
cache-control: no-cache
http://localhost:8081/api/users/1

但是通过这种方式,我可以将任何 URI 添加到正文中,并将任何随机用户添加到随机帖子中,我认为,这里存在安全问题。添加相关资源的下一个方法是将其添加到 JSON 中,如下所示:

PATCH /api/posts/1? HTTP/1.1
Host: localhost:8081
Content-Type: application/json
Authorization: Bearer 270c6dc3-04a5-48cc-b42e-c275472df459
cache-control: no-cache
{
"user": "http://localhost:8081/api/users/1"
}

但是和这个方法有同样的问题。任何用户都可以添加到任何帖子。

现在我只看到这个问题的一个解决方案 - 自定义剩余存储库并检查添加的用户是否是当前经过身份验证的用户。

最佳答案

查看您的用例“只有用户负责其 POST 上的 CRUD 操作”

是的,解决此问题的一种方法是“自定义剩余存储库并检查添加的用户是否是当前经过身份验证的用户。”

假设您有 Spring Security

我建议您不要为您的帖子传递任何用户 ID,并从安全上下文或 token 中的已登录用户 ID 中选择用户。

这样您的帖子将在 API 级别独立于用户。

关于java - 如何保护 Spring Data REST 关联请求的安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55325400/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com