小编Bar*_*ath的帖子

RESTful服务中的资源级别授权

让我们/users/{id}成为RESTful服务中的资源URL.

启用基本身份验证,只允许经过身份验证的用户访问该URL.

示例场景:

User_1&User_2是使用userId 1和2的经过身份验证的用户.由于两者都经过身份验证,因此他们都可以访问,

  • /users/1
  • /users/2

但期望是User_1应该访问/users/1而不是/users/2或其他userId.

问题:如何在RESTful服务中进行资源级别授权?

注意:我正在使用Jax-RS(使用Apache CXF实现)实现RESTful,如果您可以使用Jax-RS进行解释,这将非常有用.

-Barath

编辑:

正如Donal所说,我不是在寻找基于角色的授权而是资源级授权.

举个例子,让/ users/{id}/photos/{photoId}成为另一个资源网址.User_1应该只能访问属于他的照片.如果photoId属于user_2,那么当请求request/users/1/photos/2时,我们应该为user_1提供http_404错误代码.[由于User_1也是经过身份验证的用户,他可以调用/ users/2/photos/2,所以我们必须根据认证参数识别用户ID,而不是通过资源url]

我能想到的唯一解决方案是,包括确定每个查询中授权的唯一ID,例如

代替 SELECT * FROM PHOTO_TBL WHERE PHOTO_ID=2;

使用 SELECT * FROM PHOTO_TBL, USER_TBL WHERE PHOTO_ID=2 AND USER_ID=1 AND USER_ID=PHOTO_ID;

使用此资源提供属于特定用户的数据.[应该有一种机制来阻止修改客户端中用于决定授权的唯一id(在本例中为userId),因为所有请求都是STATELESS请求]

警告:每个查询都应足够智能,以了解安全问题并包括额外的连接.这是一种将安全逻辑与每个业务功能联系起来的糟糕设计.

我还没有看看Spring的安全性以及如何在这个用例中使用它.

rest authorization restful-authentication jax-rs

12
推荐指数
1
解决办法
3590
查看次数

当一个master及其所有slave都宕机后,如何修复redis集群状态?

脚步:

  1. 组成10个节点5主5从的工作集群
  2. 杀死一个具有最高纪元的master及其对应的slave。(例如:7008-主站和:7002-从站)
  3. 如果 :7008 和 :7002 节点不可恢复,如何修复集群?(我对崩溃的主服务器所服务的插槽的数据丢失很满意)

尝试了以下选项:

  1. redis-trib.rb 修复 - 获取“ERR Slot 13108 已忙”(请参阅​​下面的输出)
  2. 运行 clusterforget 崩溃的主从 ID,然后执行 redis-trib.rb 修复 - 得到“[ERR] 节点不同意配置!”

我认为上述两个选项都不起作用,因为 cluster_current_epoch 大于所有正在运行的节点的 cluster_my_epoch 。

如何修复redis集群状态?

输出:

Working Cluster:

root@9b1f373fcb81:/redis/redis_work#  /redis/redis-4.0.2/src/redis-cli -p 7000 cluster info | grep epoch
  cluster_current_epoch:10
  cluster_my_epoch:1
  root@9b1f373fcb81:/redis/redis_work#  /redis/redis-4.0.2/src/redis-cli -p 7001 cluster info | grep epoch
  cluster_current_epoch:10
  cluster_my_epoch:2
  root@9b1f373fcb81:/redis/redis_work#  /redis/redis-4.0.2/src/redis-cli -p 7002 cluster info | grep epoch
  cluster_current_epoch:10
  cluster_my_epoch:10
  root@9b1f373fcb81:/redis/redis_work#  /redis/redis-4.0.2/src/redis-cli -p 7003 cluster info | grep epoch
  cluster_current_epoch:10
  cluster_my_epoch:6
  root@9b1f373fcb81:/redis/redis_work#  /redis/redis-4.0.2/src/redis-cli …
Run Code Online (Sandbox Code Playgroud)

redis

6
推荐指数
2
解决办法
2万
查看次数