mfr*_*het 18 rest microservices
上下文
我有多种服务,如:
我需要连接我的微服务使用OAuth2.0,开始使用标准登录/密码(我使用自己的数据,而不是gettint第三个腿服务器)
问题
根据这些图片:
步骤1

第2步

如何在authmicroservice之外的其他服务中处理access_token控制或授权控制?
小智 11
为了在微服务架构中管理身份验证,您必须具有不同的观点.
请记住,当您使用monolith时,您只需要一个身份验证过程.
作为PHP应用程序中的一个示例,您可以在数据库中找到具有相应凭据的用户,然后您创建了一个用户"已通过身份验证"的会话.
使用微服务,工作流程有点相同.现在唯一改变的是您无法在不同的服务中打开会话.此外,您不需要获得经过身份验证的用户.您只需要确保他有权在您的微服务上执行当前呼叫.
感谢oauth2,拥有有效的access_token会为您提供此信息.
这应该回答前端部分.在后端部分(我的意思是在api网关后面),你不应该管理access_token,因为它与微服务无关.您可以使用功能键在微服务中查找与用户相关的任何信息,例如uuid.
为了在使用oauth2时获得uuid,我建议也使用openid connect.使用此协议的用户可以管理特定的用户信息,并且可以访问特定的端点"/ userinfo".
希望这个架构能让这个答案更加清晰.
我们的激活器中有微服务身份验证流程的教程和描述,位于 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\xe2\x80\x94\xc2\xa0 在代理(网关)中执行此操作
\n\n\xe2\x80\x94\xc2\xa0在计费微服务内执行
\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\nget("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}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
6297 次 |
| 最近记录: |