重定向到AWS Cognito用户池的内置登录页面

时间:2018-05-03 06:44:44

标签: amazon-web-services aws-api-gateway amazon-cognito

我在AWS API Gateway中创建了一个带有1个REST端点的API。 REST端点调用用C#编写的Lambda函数。我还创建了一个AWS Cognito用户池。我要做的是将AWS Cognito与AWS Gateway API集成,以便当未经身份验证的用户尝试调用REST API时,API会将它们重定向到AWS Cognito的内置登录页面。目前,我已经将2集成在一起但是当我尝试调用REST API时,它只是显示未经授权的消息。我希望它在那时重定向到登录页面,而不是显示该消息。我已经阅读了很多AWS文档,并且不知道我缺少什么。我该怎么做呢?

2 个答案:

答案 0 :(得分:1)

我找到了解决方法。我放弃了原来的方法,最终做到了这一点:

  1. 创建了一个AWS Cognito用户池,并在App客户端设置中将授权类型设置为Implicit(因为我后面提到的HTML / JS网站是单页应用程序)。
  2. 在用户池中创建了一个组和用户,以便进行测试。
  3. 在API网关中创建了一个使用AWS Cognito授权程序的REST API。
  4. 使用AWS S3设置静态网站。静态网站包含一个简单的HTML / JS客户端,该客户端使用AWS Cognito Identity库对用户进行身份验证。一旦用户通过身份验证,我就会从库中收到JWT令牌。然后,使用AJAX,我将此标记传递给上面的REST API。
  5. 这实现了我的目标。

答案 1 :(得分:0)

我能够通过指定自定义Gateway Response来解决该问题,如果来自Cognito的响应未经授权,则将302重定向发送到登录页面。在Terraform中,它看起来像这样:

resource "aws_api_gateway_gateway_response" "unauthorized" {
  rest_api_id   = "${aws_api_gateway_rest_api.apiGateway.id}"
  status_code   = "302"        
  response_type = "UNAUTHORIZED"  

  response_templates = {
    "application/json" = "{'message':$context.error.messageString}"
  }

  response_parameters = {
    "gatewayresponse.header.Location" = "'https://example.com/login'"
  }
}