我正在使用angularjs和Web API处理SPA应用程序。我一直在为api上的资源设置用户权限。
由于api是一个RESTful服务,我不确定存储/检索权限的最佳实践。我的应用程序中的权限可能会有所变化,因为用户对其所属的不同公司拥有不同的权限。用户可以在应用程序中动态更改其公司。
我现在的方式已经解决,就是当用户登录时,应用程序为所有公司存储用户拥有的每个权限的声明。声明与权限名称和公司ID连接在一起存储。然后我有一个接受权限名称的属性。然后我将该名称与应用程序中选定的公司ID连接起来,看看它是否存在于索赔中。如果是这样,他们可以访问。
我看到的另一个选项是仅在声明(用户ID,名称)中仅存储相关的用户信息。然后每次我需要角色或权限时进行查找。这里的缺点是会有很多流量,因为我几乎每个api请求都需要这些信息。此外,由于我将身份验证和资源服务器分开,因此不是简单的查找。我必须通过http来获取数据。
这些是我唯一的选择还是有更好的方法来解决这个问题?
答案 0 :(得分:0)
您想使用Bearer Tokens来解决此问题。承载令牌本质上是加密的JSON字符串,可以包含用户的所有声明。在您的情况下,我建议对每个公司/许可组合单独提出索赔。
在服务器上创建承载令牌,您用于生成承载令牌的确切技术取决于您使用的服务器技术/框架。
您的SPA将在每次请求时发送持票令牌(请查看$ HttpInterceptor服务来完成此操作)。在服务器上,您的服务将解密令牌,并使用其中的声明信息来验证用户是否具有给定端点的权限。