【问题标题】:AWS api gateway with oauth2 and spring security具有 oauth2 和 spring 安全性的 AWS api 网关
【发布时间】:2019-07-04 21:10:23
【问题描述】:

我前面有 aws api 网关。使用 api 网关直接通过 ALB(应用程序负载均衡器)的 http 端点。并将 ECS fargate 作为 ALB 目标组。我在 Spring Boot 中开发了 3 个微服务。

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

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

【问题讨论】:

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


    【解决方案1】:

    不确定您是在询问如何使用 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 Gateway 安全性。您创建的 Lambda Authorizer 可以根据您已经在微服务中实现的任何库或框架或模型对请求进行身份验证。

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

    1. 我假设你已经配置了 Spring Security 来保护你的微服务(如果没有,这个链接提供了一个很好的教程来说明如何做到这一点https://dzone.com/articles/spring-security-with-oauth2)。
    2. 在这里我还假设您已成功从 Spring Security 生成 OAuth 令牌,并且您的 API 客户端将其作为不记名令牌在 Authorization 标头中发送。

    简而言之,使用 Java 创建一个 Lambda 授权器(按照第一个链接中的教程进行操作) 这个想法是您指定包含 OAuth 持有者令牌的 HTTP 标头(通常这是“授权”标头)。然后,您配置您的 API Gateway 终端节点以将此标头传递给您的 Lambda 授权方。一旦 Lambda Authorizer 函数接收到标头,它就可以使用 Spring Security 库来验证承载令牌(请参阅上面的第二个链接了解如何实现)。 如果不记名令牌已成功验证,则 Lambda 授权方的输出必须是一个策略文档(请参阅此链接 https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-lambda-authorizer-output.html),告知 API 网关是允许还是拒绝请求。

    从架构的角度来看,将您的微服务实现为单独的 Lambda 函数(如果可能的话)然后使用 API 网关 Lambda 授权器(如上所述)保护它们会更加简洁。

    我希望这能给你一些关于如何前进的指导。

    【讨论】:

    • 你的回答很清楚,给了我一个方向来解决我的架构。谢谢。
    猜你喜欢
    • 2015-05-22
    • 2012-06-15
    • 2021-11-26
    • 2017-02-09
    • 2016-04-15
    • 2016-03-29
    • 1970-01-01
    • 2017-08-05
    • 1970-01-01
    相关资源
    最近更新 更多