当前位置: 首页 > 知识库问答 >
问题:

微服务认证策略

湛钊
2023-03-14

我很难为微服务架构选择一个体面的/安全的身份验证策略。我在这个主题上找到的唯一的SO帖子是这样的:微服务架构中的单点登录

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

从我的研究中,我看到有两种可能的策略:

    null

共有1个答案

秋煌
2023-03-14

通过使用JWT令牌,可以避免在后端存储会话信息。

下面是使用OAuth2.0&OpenID Connect的样子。我还在答案中添加了用户名和密码登录,因为我假设大多数人也将其作为登录选项添加。

>

  • Account-Service:负责用户创建和身份验证的微服务。可以有endpoint为谷歌,脸书和/或常规用户名和密码认证endpoint-登录,注册。通过注册endpoint或首次Google/FB登录,我们可以在数据库中存储有关用户的信息。在用户使用这两个选项成功登录后,我们在服务器端创建一个带有相关用户数据的JWT令牌,比如userid。为了避免篡改,我们使用我们定义的令牌秘密(即字符串)对其进行签名。这个令牌应该作为httpOnly cookie与登录响应一起返回。为了安全起见,建议使用https。对于OpenID connect规范,此令牌将是ID令牌。

    客户端web应用程序:将经过签名的JWT作为httpOnly cookie接收,这意味着javascript代码无法访问该数据,从安全的角度来看,这是推荐的。当向服务器或其他微服务发送后续请求时,我们将cookie附加到请求(在axios中,它意味着使用With Credentials:true)。

    需要通过令牌对用户进行身份验证的微服务:这些服务验证JWT令牌的签名,并使用为令牌签名提供的相同秘密读取它。然后,他们可以访问存储在令牌上的数据,如用户ID,并获取关于用户的其他信息,或者执行任何其他逻辑。注意-这不是用于授权,而是用于身份验证。为此,我们有refresh token和access token,这超出了问题的范围。

    我最近创建了一个关于这个主题的详细指南,以防它对某人有所帮助:https://www.aspecto.io/blog/microservices-authentication-strategies-theory-to-sacture/

  •  类似资料:
    • 我正在尝试设计一个JAAS微服务,它处理多个J2EE应用程序的用户身份验证。目前,我们有多个应用程序,它们根据LDAP进行身份验证,并具有独立的角色系统。现在我一直在设计应用程序和认证后端之间的接口。 通过自定义登录模块:设计一个自定义登录模块,使用我们登录服务中的非安全EJB接口进行身份验证和授权,但我记得读到登录模块不能注入EJB/使用EJB。 这是正确的起点,还是我有其他可能性从我们的应用程

    • 我们几乎没有UI使用的微服务。AzureB2C是我们的身份验证提供程序。每个微服务(API)都需要访问令牌,并且需要与数据库进行授权。此数据库具有基于角色的门禁权限。 今天的情况是这样的: 在这方面,我们有两个问题: 由于AzureB2C不允许将多个资源的作用域添加到一个访问令牌中,我们必须获得多个访问令牌。 我们现在处于这样一个阶段,用户界面需要调用两个或更多的API来在一个页面上显示数据。 我

    • 我最近读了不少关于微服务的文章,尤其是关于AuthN和Authz的文章。在很大程度上,这一切都很有意义,我可以看到这一切应该如何工作。 (注意--现在我只实现了客户端凭据授予和资源所有者密码凭据授予,因为我只是想看看它是如何工作的,而且用curl调用它们更容易。但我不知道这有什么不同)

    • 帮助用户解决关于认证源、域、组、用户、项目、角色、权限等方面的问题。 认证服务包含哪些内容? 主要包括认证源、域、组、用户、项目、角色、权限等方面内容。 如何调整域配额和项目配额? 调整域配额 若用户是系统管理员,可直接在管理后台-系统配置-域中调整配额大小。 若用户是域管理员,若平台启用域配额申请工单流程后,可在控制面板处申请调整域配额大小,等待工单审批通过后,域配额将自动调整。 调整项目配额:

    • 我将使用Laravel框架构建micrservices。我有用户微服务,它处理客户端凭证并验证它们(为客户端创建JWT)。此外,还有另一种需要用户认证的微服务。 问题是,如果秘密访问令牌密钥仅在用户微服务中,我如何验证客户端在微服务(用户微服务除外)中的访问令牌?或者,我应该在每个微服务中保留密钥吗?

    • null null myApp应用程序不能直接访问用户数据库,所有通信都只能通过用户认证微服务处理。 在过去的一周里,我广泛阅读了关于REST API中的授权/身份验证的内容,但仍然不知道如何为User->myApp和MyApp->User-Authentication微服务构建一个可靠的授权/身份验证系统。 这是我现在想出来的。 null Now, user signs in sending u