没有自定义授权者的AWS Lambda基本身份验证

时间:2019-02-03 13:32:43

标签: node.js aws-lambda basic-authentication serverless

我无法为用Node.js编写的AWS lambda函数设置基本身份验证。

问题:
AWS lambda函数,它是附加服务的代理。此功能仅转发整个请求,并向用户提供整个响应。这就是为什么我需要强制使用Authentication标头,并且希望有一个提示窗口来传递凭据:https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication

除了我的lambda函数的代理部分之外,我还关注身份验证问题,并编写了以下代码:

export const proxy = async (event) => {
    const authorizationHeader = event.headers.Authorization;
    if (typeof authorizationHeader === undefined) {
        throw new Error("Unauthorized");
    }
    ...
};
service:
  name: proxy-auth-test

plugins:
  - serverless-webpack

provider:
  name: aws
  runtime: nodejs8.10
  memorySize: 128
  timeout: 10

functions:
  proxy-async:
    handler: handler.proxy
    events:
      - http:
          method: get
          path: api/proxy

resources:
  Resources:
    GatewayResponse:
      Type: 'AWS::ApiGateway::GatewayResponse'
      Properties:
        ResponseParameters:
          gatewayresponse.header.WWW-Authenticate: "'Basic'"
        ResponseType: UNAUTHORIZED
        RestApiId:
          Ref: 'ApiGatewayRestApi'
        StatusCode: '401'

端点正常工作,但是我无法获得用于传递凭据的提示窗口。我根据此https://medium.com/@Da_vidgf/http-basic-auth-with-api-gateway-and-serverless-5ae14ad0a270设置了GatewayResponse,但是我不想提供仅负责用户授权的附加lambda函数。

就我而言,我无法在执行最终的lambda函数之前对用户进行授权,因为该函数仅转发请求(也有凭据),仅此而已。

是否有人试图通过提示窗口设置基本身份验证,而没有使用无服务器和AWS lambda的额外授权者?

2 个答案:

答案 0 :(得分:1)

您没有在响应中返回statusCode。您正在关注的文章似乎正在使用Custom Authorizer,它总是返回401 status codecallback('Unauthorized')。您的Lambda函数需要返回适当的错误代码和标头。

if (typeof authorizationHeader === undefined) {
    return {
        statusCode: 401,
        body: 'unauthorized',
        headers: {
            'WWW-Authenticate': 'Basic'
        }
    }
}

答案 1 :(得分:1)

从集成返回响应时,WWW-Authenticate将重新映射为X-Amzn-Remapped-WWW-Authenticate(1)。浏览器将不会处理此重新映射的标头,因此不会显示提示。

这意味着您必须按照HTTP引用级别将授权逻辑移至Lambda Authorizer,然后将“ unauthorized”返回到回调,如您所引用的媒体链接中所述。到目前为止,这是返回WWW-Authenticate标头的唯一方法。

来源:

1:https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-known-issues.html