相关疑难解决方法(0)

微服务架构中的单点登录

我正在尝试设计一个绿色领域项目,该项目将包含多个服务(服务数据)和Web应用程序(提供HTML).我读过微服务,看起来很合适.

我还有的问题是如何实现SSO.我希望用户进行一次身份验证,并可以访问所有不同的服务和应用程序.

我可以想到几种方法:

  1. 添加身份服务和应用程序.任何具有受保护资源的服务都将与Identity服务通信,以确保其拥有的凭据有效.如果不是,它将重定向用户进行身份验证.

  2. 使用诸如OpenID之类的Web标准,并让每个服务处理它自己的身份.这意味着用户必须单独授权每个服务/应用程序,但之后它将是SSO.

我很乐意听到其他想法.如果特定PaaS(例如Heroku)具有也可接受的专有解决方案.

cloud security paas single-sign-on microservices

44
推荐指数
2
解决办法
2万
查看次数

每个微服务都应该管理自己的用户权限和用户角色吗?

我有一个设计问题,不确定如何解决。

假设我的主要应用程序包含6个模块:

  • 客户
  • 网关
  • 认证服务
  • 论坛
  • 画廊
  • 讯息

客户端应该只与网关服务通信。

我是否应该让网关进行用户身份验证(理想情况下会导致JWT)和其他3种生产服务(论坛,画廊,消息)仅验证令牌并检索给定用户自己管理的权限和角色?

为了说明我的一些麻烦,我创建了一个时序图: 此图显示了序列图,我遇到了麻烦

如果愿意,请单击此处获取原始的draw.io图形。

我不想使用任何第三方身份验证服务;我只希望我的身份验证服务(已完成)注册用户并让他们登录。还是应该在该服务中管理权限和角色?

我花了几个月的时间来解决这个问题,但是我根本找不到合适的结构,因此我可以让用户注册,登录/注销并与各种生产性服务进行通信。我目前正在使用Java作为后端工具,但是关于微服务的好处是,我不必全部使用一种编程语言。

欢迎任何帮助!

附:我阅读了微服务认证策略Zuul-Api网关认证,但是这两种方法似乎都不适用。

jwt microservices

7
推荐指数
2
解决办法
2351
查看次数

使用OAuth2/OpenId Connect和微服务进行身份验证和授权

我尝试将Oauth2/OpenId Connect实现为基于Java/Spring Cloud的微服务架构.我目前的问题是关于微服务之间的令牌传播或者像RabbitMQ这样的消息代理.

很少有话题谈论这个.我只发现了这个Stackoverflow线程,但我不喜欢提出的答案.

以下是不同的情况:

我的微服务A接收最终用户通过API网关发起并携带有效访问令牌的请求(JWT具有与最终用户相对应的范围/声明:用户名,ID,电子邮件,权限等).这种情况没有问题.微服务具有处理请求的所有信息.

第一个问题:如果微服务A需要调用微服务B会发生什么?

  • 第一种解决方案:微服务A将访问令牌发送到微服务B

==>如果令牌在到达微服务B之前到期会发生什么?

  • 第二种解决方案:使用OAuth(aka服务帐户)提出的"客户端凭证授权".这意味着微服务A请求具有自己凭据的新访问令牌并使用它来调用微服务B.

==>使用此解决方案,与用户相关的所有数据(用户名,ID,权限等)都将丢失.

例如,微服务B中的被调用方法需要用户id才能工作.用户标识值可以设置为查询字符串.如果使用用户访问令牌调用该方法,则微服务B可以验证查询字符串中的用户id值是否等于JWT令牌中的用户id值.如果使用服务访问令牌调用该方法,则微服务B无法验证查询字符串值并且需要信任微服务A.

对于这个cas,我​​听说过来自OAuth 2 的" 令牌交换 "草案.这个想法非常有趣.它允许微服务A将用户访问令牌转换为另一个具有较少权限的访问令牌,但是为微服务A伪造.不幸的是,这种机制仍处于草案中,并未在许多产品中实现.

第二个问题:如果微服务A向RabbitMQ发送消息并且微服务B收到此消息,会发生什么?

  • 第一个解决方案:身份验证和授权由RabbitMQ管理(虚拟主机,帐户等)

==>再一次,所有与用户相关的数据都将丢失.此外,我们有2个存储库来管理身份验证和授权

  • 第二个解决方案:像第一个问题一样,使用"客户端凭据授予"

你怎么看待这件事 ?还有其他更好的解决方案吗

提前致谢.

authentication authorization oauth openid-connect microservices

5
推荐指数
1
解决办法
758
查看次数