我正在学习微服务架构并整理一些概念证明,但我已经碰壁了。
我已经使用带有公共API网关的Lambda在amazon AWS上托管了无服务器的用户服务,该网关允许您查询用户数据库。它非常简单,只是看起来像:
api/users?email=myemail@gmail.com
此API具有与之关联的授权,因为某些用户可以了解其他用户,而有些用户则不知道。所以对于一些用户来说,这将返回404(或者403),而对于其他用户,他们将获得200和结果。
现在我来编写认证服务,它接受一个电子邮件地址和密码并返回一个令牌。我该如何从用户服务获取用户数据?我很乐意只调用REST API,但它有授权,因为它是公开的。此外,公共API不会返回我需要的(哈希)密码字段。
所以我的问题:
我是否应该有一个单独的私有API用于服务间通信,它返回所有信息,或者我应该有一个魔术授权密钥,我发送给api,它将请求者标识为内部服务,以便显示一切。
补充问题:
如果我使用带有魔术身份验证代码的公共API,我应该使用我的客户端服务将使用的相同公共API来调用fetch,还是应该调用一些内部的amazon url?
答案 0 :(得分:1)
我不确定这个问题有一个好的答案。但这里有一些想法:
您确定需要单独的身份验证和用户服务,并且无法将其构建为一个单元吗?这样会更有效率 - 通常人们会试图避免从lambda函数调用lambda函数,因为它更慢并且很难测试/调试。
如果你需要在lambdas之间进行通信,你可以直接调用一个,而不是使用你正在使用的语言的SDK通过api网关。例如javascript:http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Lambda.html#invoke-property通过这种方式,您可以控制角色和策略的访问权限。
不要重新发明轮子。你看过AWS Cognito了吗? http://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html