微服务认证

mfr*_*het 18 rest microservices

上下文

我有多种服务,如:

  • 用户(LDAP或活动目录等...)
  • 开票
  • 规划
  • 等等...
  • 认证

我需要连接我的微服务使用OAuth2.0,开始使用标准登录/密码(我使用自己的数据,而不是gettint第三个腿服务器)

问题

根据这些图片:

步骤1

在此输入图像描述

第2步

在此输入图像描述

如何在authmicroservice之外的其他服务中处理access_token控制或授权控制?

小智 11

为了在微服务架构中管理身份验证,您必须具有不同的观点.

请记住,当您使用monolith时,您只需要一个身份验证过程.

作为PHP应用程序中的一个示例,您可以在数据库中找到具有相应凭据的用户,然后您创建了一个用户"已通过身份验证"的会话.

使用微服务,工作流程有点相同.现在唯一改变的是您无法在不同的服务中打开会话.此外,您不需要获得经过身份验证的用户.您只需要确保他有权在您的微服务上执行当前呼叫.

感谢oauth2,拥有有效的access_token会为您提供此信息.

这应该回答前端部分.在后端部分(我的意思是在api网关后面),你不应该管理access_token,因为它与微服务无关.您可以使用功能键在微服务中查找与用户相关的任何信息,例如uuid.

为了在使用oauth2时获得uuid,我建议也使用openid connect.使用此协议的用户可以管理特定的用户信息,并且可以访问特定的端点"/ userinfo".

希望这个架构能让这个答案更加清晰.

在此输入图像描述


Jac*_*dek 0

我们的激活器中有微服务身份验证流程的教程和描述,位于 Scala \xe2\x80\x94\xc2\xa0 http://www.typesafe.com/activator/template/reactive-microservices(来源: https: //github.com/theiterators/reactive-microservices

\n\n
\n\n

基本思想是:您需要验证每个请求的身份验证令牌的真实性。\n您可以:

\n\n

\xe2\x80\x94\xc2\xa0 在代理(网关)中执行此操作

\n\n

\xe2\x80\x94\xc2\xa0在计费微服务内执行

\n\n
\n\n

我们倾向于做的是:在每个面向客户端的微服务中验证 Auth-Token。

\n\n

\xe2\x80\x94\xc2\xa0我们将 Auth-Token 用户信息保存在 Redis 实例中。

\n\n

\xe2\x80\x94\xc2\xa0面向客户端的服务询问redis实例此令牌是否有效

\n\n

\xe2\x80\x94\xc2\xa0Redis 返回一些 JSON 字符串,我们可以将其用作用户数据以进行进一步授权。

\n\n

所以服务器端流程看起来像这样

\n\n
get("projects/" / Segment) { projectName =>\n  getHeader("Auth-Token") { authToken =>\n    Redis.get("auth:token:#{authToken}").map { userJson =>\n      if(userJson("projects").include(projectName)) {\n        ...processSth...\n        Ok\n      } else {\n        Unauthorized\n      }\n    }\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n