管理RESTful服务的权限

时间:2017-03-09 16:22:42

标签: c# asp.net angularjs asp.net-web-api permissions

我正在使用angularjs和Web API处理SPA应用程序。我一直在为api上的资源设置用户权限。

由于api是一个RESTful服务,我不确定存储/检索权限的最佳实践。我的应用程序中的权限可能会有所变化,因为用户对其所属的不同公司拥有不同的权限。用户可以在应用程序中动态更改其公司。

我现在的方式已经解决,就是当用户登录时,应用程序为所有公司存储用户拥有的每个权限的声明。声明与权限名称和公司ID连接在一起存储。然后我有一个接受权限名称的属性。然后我将该名称与应用程序中选定的公司ID连接起来,看看它是否存在于索赔中。如果是这样,他们可以访问。

我看到的另一个选项是仅在声明(用户ID,名称)中仅存储相关的用户信息。然后每次我需要角色或权限时进行查找。这里的缺点是会有很多流量,因为我几乎每个api请求都需要这些信息。此外,由于我将身份验证和资源服务器分开,因此不是简单的查找。我必须通过http来获取数据。

这些是我唯一的选择还是有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:0)

您想使用Bearer Tokens来解决此问题。承载令牌本质上是加密的JSON字符串,可以包含用户的所有声明。在您的情况下,我建议对每个公司/许可组合单独提出索赔。

在服务器上创建承载令牌,您用于生成承载令牌的确切技术取决于您使用的服务器技术/框架。

您的SPA将在每次请求时发送持票令牌(请查看$ HttpInterceptor服务来完成此操作)。在服务器上,您的服务将解密令牌,并使用其中的声明信息来验证用户是否具有给定端点的权限。