当我们构建ASP.NET Web API endpoints 时,我们可以使用 [Authorize]
属性来保护它们,我们可以使用承载令牌来验证请求并调用 endpoints .
我的问题是关于授权以及如何在身份验证成功后更好地授予对资源的访问权限 .
例如,如果有一个 endpoints api/contracts/details
并希望限制对特定人员的访问,我说的是SQL表字段(对象属性)甚至是整个表 . 怎么能实现这一目标?
我觉得角色不是最好的选择 . 任何建议?
要么
在用户注册之后,他可以生成在请求承载令牌时必须出现的 client_id
和 client_secret
. 我可以在令牌中添加 client_id
作为声明 .
在数据库中我有这样的表:
-
用户(用户详细信息)
-
客户端(client_id,client_secret等)
-
RefreshToken(refresh_token,受保护的票证)
我可以创建另一个名为 Access
的表,其中我指定了所有允许的enpoints(Client Table - > Access Table on many relationship)
访问表:
-
api / user
-
api / devices
-
api / products
然后我可以创建一个消息处理程序并检查所有传入的请求 . 解码承载令牌,解压缩client_id并在Access表中查询允许的 endpoints . 如果传入请求与允许的 endpoints 匹配,则让它通过,否则拒绝它 .
这应该工作我猜?
1 回答
您最好使用角色属性,但您需要创建TokenValidationHandler . 检查这个优秀的答案here