在我之前的工作中实现微服务架构时,我们认为最好的方法是与 #1 保持一致,添加身份服务并通过它授权服务访问。在我们的例子中,这是通过令牌完成的。如果请求带有授权令牌,那么如果它是用户与服务会话中的第一次调用,我们可以使用身份服务验证该令牌。一旦令牌得到验证,它就会保存在会话中,因此用户会话中的后续调用不必进行额外的调用。如果需要在该会话中刷新令牌,您还可以创建计划作业。
在这种情况下,我们使用 OAuth 2.0 端点进行身份验证,并将令牌添加到 HTTP 标头以调用我们的域。所有服务都从该域路由,因此我们可以从 HTTP 标头中获取令牌。由于我们都是同一个应用程序生态系统的一部分,最初的 OAuth 2.0 授权将列出用户将为其帐户授予权限的应用程序服务。
这种方法的一个补充是身份服务将提供代理客户端库,该代理客户端库将添加到 HTTP 请求过滤器链并处理服务的授权过程。该服务将被配置为使用来自身份服务的代理客户端库。由于我们使用的是 Dropwizard,这个代理将成为一个 Dropwizard 模块,将过滤器引导到正在运行的服务进程中。这允许对身份服务进行更新,只要接口没有发生显着变化,相关服务就可以轻松地使用免费的客户端更新。
我们的部署架构分布在 AWS Virtual Private Cloud (VPC) 和我们自己公司的数据中心。OAuth 2.0 身份验证服务位于公司的数据中心,而我们所有的应用程序服务都部署到 AWS VPC。
我希望我们采取的方法对您的决定有所帮助。如果您还有其他问题,请告诉我。