具有oauth2和Spring安全性的AWS api网关

时间:2019-02-11 11:20:53

标签: oauth-2.0 microservices aws-api-gateway amazon-cognito spring-security-oauth2

我前面有aws api网关。使用api网关直接引导ALB(应用程序负载平衡器)直通的http端点。以及ECS网关作为ALB目标组。我在春季启动中开发了3种微服务。

现在,我想为其余的API集成oauth2和spring安全性。如何将其与AWS API网关集成?我不使用lambda,也不想使用aws cognito。

什么是架构?如何将aouth2与多个微服务集成?

1 个答案:

答案 0 :(得分:0)

不确定是否在询问如何使用Spring Security来保护微服务或(如果您已经配置了Spring Security)然后在调用微服务之前如何配置AWS API Gateway以使用Spring Security对请求进行身份验证。但是,我将在下面的简短回答中尝试同时介绍这两者。

要保护您的AWS API Gateway端点,您将需要使用AWS Lambda Authorizer来实现您所追求的目标。这是您需要的文档(https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html)。您不必使用AWS Cognito来实现API网关安全性。您创建的Lambda授权程序可以根据您已经在微服务中实现的任何库,框架或模型对请求进行身份验证。

在我的回答中,我做出以下假设:

  1. 我假设您已经配置了Spring Security以保护您的微服务(如果没有,此链接提供了有关如何进行此https://dzone.com/articles/spring-security-with-oauth2的很好的教程)。
  2. 我在这里还假设您已经从Spring Security成功生成了OAuth令牌,并且您的API客户端正在将其作为承载令牌在Authorization标头中发送。
简而言之,使用Java创建Lambda授权器(按照第一个链接中的教程进行操作) 这个想法是您指定包含OAuth承载令牌的HTTP标头(通常是“ Authorization”标头)。然后,您配置API网关终结点以将此标头传递给Lambda Authorizer。 Lambda Authorizer函数一旦接收到标头,便可以使用Spring Security库验证承载令牌(有关如何实现的信息,请参见上面的第二个链接)。 如果承载令牌已成功验证,则Lambda授权者的输出必须是一个策略文档(请参阅此链接https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-lambda-authorizer-output.html),该文档告诉API网关允许或拒绝该请求。

从架构的角度来看,将微服务实现为单独的Lambda函数(如果可能的话),然后使用上文所述的API Gateway Lambda Authorizer保护它们更为干净。

我希望这会给您一些指导,以帮助他们前进。