Authentication 微服务认证策略

Authentication 微服务认证策略,authentication,architecture,microservices,Authentication,Architecture,Microservices,我很难为微服务体系结构选择合适的/安全的身份验证策略。我在这个主题上找到的唯一一篇文章是: 我的想法是在每个服务(如身份验证、消息传递、通知、配置文件等)中都有一个对每个用户的唯一引用(相当符合逻辑,然后是他的用户id),并且如果登录,可以获得当前用户的id 从我的研究中,我发现有两种可能的策略: 1.共享架构 在此策略中,身份验证应用程序是一种服务。但是每个服务必须能够进行转换会话id=>用户id,因此它必须非常简单。这就是我想到Redis的原因,它将存储key:valuesession\u

我很难为微服务体系结构选择合适的/安全的身份验证策略。我在这个主题上找到的唯一一篇文章是:

我的想法是在每个服务(如身份验证、消息传递、通知、配置文件等)中都有一个对每个用户的唯一引用(相当符合逻辑,然后是他的
用户id
),并且如果登录,可以获得当前用户的
id

从我的研究中,我发现有两种可能的策略:

1.共享架构

在此策略中,身份验证应用程序是一种服务。但是每个服务必须能够进行转换
会话id
=>
用户id
,因此它必须非常简单。这就是我想到Redis的原因,它将存储key:value
session\u id:user\u id

2.防火墙体系结构

在这种策略中,会话存储实际上并不重要,因为它只由身份验证应用程序处理。然后可以将
用户id
转发到其他服务。我想到了Rails+Desive(+Redis或mem缓存,或cookie存储等),但有很多可能性。唯一重要的是服务X永远不需要对用户进行身份验证


这两种解决方案在以下方面比较如何:

  • 保安
  • 健壮性
  • 可伸缩性
  • 易用性
或者你可以建议另一个我在这里没有提到的解决方案

我更喜欢解决方案#1,但还没有发现多少默认实现可以确保我朝着正确的方向前进

我希望我的问题没有结束。我真的不知道还有什么地方可以问


提前感谢

根据我的理解,解决这个问题的一个好方法是使用OAuth 2协议(您可以在

当您的用户登录到您的应用程序时,他们将获得一个令牌,使用该令牌,他们将能够发送到其他服务以在请求中识别他们

链式微服务设计示例

资源:

您可以用于身份验证和授权目的


您必须使用防火墙体系结构,因此您可以更好地控制安全性、健壮性、可扩展性和易用性

简短回答:使用Oauth2.0类基于令牌的身份验证,它可以用于任何类型的应用程序,如Web应用程序或移动应用程序。web应用程序所涉及的步骤顺序如下:

  • 针对ID提供程序进行身份验证
  • 将访问令牌保留在cookie中
  • 访问webapp中的页面
  • 呼叫服务
  • 下图描述了所需的组件。这种将web和数据API分离的体系结构将提供良好的可伸缩性、弹性和稳定性


    请您提供更多关于您想要实现的目标的详细信息,好吗?在第一种情况下,是针对Redis进行身份验证,还是在服务本身中进行身份验证?第二张图中缺少Redis,这是故意的吗?我添加了一些信息。请让我知道还不清楚。谢谢你有没有想过要创建一个使用OAuth协议的微服务,而你的另一个服务使用创建的令牌?我对这个解决方案很好奇,但我仍然不明白它在实践中是如何工作的。你知道我在哪里可以找到它的一些标准实现吗?@AugustinRiedinger,谢谢你放了这个。我还采取了一些小步骤,将我的单一web应用程序分解为微型服务。在您的情况下,服务1-n是无状态的还是状态已满的。如果状态已满,您是否考虑过在每个服务中管理会话。谢谢,很清楚。我发现这篇非常好的文章分解了几乎相同的解决方案:您的答案很好,但是从API网关(从内部或AuthMicroService中)生成的令牌如何被随机微服务处理,其目的不是进行身份验证,而且他的业务代码中可能没有oauth管理?例如,您可以使用Netflix Zuul将网关中接收到的令牌发送到所有服务,它们将知道用户信息。在服务之间使用OAuth2的另一个好处是,您可以使用端点来区分经过服务身份验证和用户身份验证的操作。OAuth更多的是授予系统访问另一个系统中保存的用户数据的权限。在我看来,这对SAML来说是一个很好的例子。AWS Lambda不是变得“冷漠”并且需要时间启动吗?这会使登录速度变慢,不是吗?@tsuz,AWS现在在lambda中引入了并发功能,您可以在其中保留并发。这样,您就可以解决冷启动问题。我很想在几年前看到这个答案,这让我非常简单地理解了微服务体系结构与身份验证和授权无关的微服务是如何组合起来的,以便访问其他微服务的services@Sandeep,我认为您指的是配置的并发,而不是保留的。