如何使用微服务架构的角色授权?

时间:2016-11-07 14:17:51

标签: ruby-on-rails microservices rails-api

我在rails中编写了一个微服务架构的API。 在我的API中,我需要实现角色授权来授权每个用户使用他们的角色。 有没有适合微服务架构的宝石,或者我应该编写自己的逻辑来授权用户。 我正在使用gem授权gem,但它提供了很多适合微服务架构的功能。(rolify) 还有其他适合微服务架构的吗?

先谢谢。

3 个答案:

答案 0 :(得分:0)

设计宝石是行业的领导者。它的所有方法都是完全可定制的 - 它们可以用作before_action(典型用法但不适用于微服务),也可以用作代码中的另一种方法(在块内,在' if&#中) 39;陈述等)。在这里查看github页面 https://github.com/plataformatec/devise

它有很多功能,我可以教这个宝石的全部课程。如果你还不熟悉,还有很多东西值得学习。

答案 1 :(得分:0)

每当您必须在Rails中实施 MicroServices 时,我更愿意使用 JWT JSON Web Token来放置您的身份验证和授权(基于角色的权限) })即可。因为在 MicroServices 中,有多个不同的项目部署在不同的服务器上并通过API相互通信,您只需要一个API网关,用户提供登录凭据,它应该适用于所有不同的项目。我不喜欢设计,因为它在成功登录后创建了一个有状态的会话,而JWT是无状态的。

  

无状态意味着每个HTTP请求都完全隔离。当客户端发出HTTP请求时,它包含服务器完成该请求所需的所有信息。服务器永远不会依赖先前请求的信息。如果该信息很重要,客户将在此请求中再次发送该信息。

JWT的情况下,每个请求都附带一个类似"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE0NjUwOTYxMzMsInN1YiI6MX0.e9yeOf_Ik8UBE2dKlNpMu2s6AzxvzcGxw2mVj9vUjYI"的令牌,其中包含其有效负载中用于登录的所有必需信息。请参考https://restfulapi.net/statelessness

令牌还应包括用户的角色或权限(例如管理员角色),并且基于它应该获取数据的角色,以及它比有状态请求相对更快。因为在有状态请求的情况下(如在传统Web应用程序中发生的那样),它将session_id存储在cookie中并发送带有请求的session_id。因此,在服务器端,首先获取其用户信息并检查其是否为有效用户,然后获取其角色,然后在成功进行身份验证和授权后,它将获取所请求的数据。在JWT的情况下,由于角色和用户名在令牌本身内,它将在服务器端解码,并直接从DB获取所请求的数据。 JWT(或无状态)通过将API部署到多个服务器,有助于将API扩展到数百万并发用户。任何服务器都可以处理任何请求,因为没有与会话相关的依赖关系。

有状态和无状态之间的区别,请参考https://restfulapi.net/statelessnesshttps://nordicapis.com/defining-stateful-vs-stateless-web-services

有关实施的详细信息,请参阅http://pacuna.io/2016/06/03/rails-and-jwthttps://github.com/nsarno/knock

答案 2 :(得分:0)

感谢Answers人员, 得出答案,我已经实施了自己的授权方式。 我想出了一个用户 - >的设计。角色 - >资源 - >权限 这里的资源是各个部分,每个用户在使用资源时都拥有一些权限,角色具有一组已定义的资源,具有一些权限,如

read_only,read_create,read_update etc

每个用户可以拥有任意数量的角色,因此用户有权访问特定资源。我会使用

对每个操作执行此检查
before_action

谢谢, 苏雷什

相关问题