2017-03-09 75 views
0

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

由于api是一个RESTful服务,我不确定存储/检索权限的最佳实践。我的应用程序中的权限可能会经常发生更改,因为用户对其所属的不同公司具有不同的权限。用户可以在应用程序中随时更改他们的公司。

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

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

这些是我唯一的选择还是有更好的方法来处理?

回答

0

你想使用承载令牌来解决这个问题。不记名令牌本质上是一个加密的JSON字符串,可以包含用户的所有声明。就你而言,我建议为每个公司/权限组合提供单独的索赔。

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

你的SPA会发送不记名的令牌给每个请求(看看$ HttpInterceptor服务来完成这个)。在服务器上,您的服务将解密令牌,并使用其中的声明信息来验证用户是否具有给定端点的权限。

+0

感谢拜伦的帖子。我想我应该已经提到,使用持票人令牌来存储索赔的权限。很高兴听到你推荐我去的路线。 –