Базовая аутентификация AWS без специальной авторизации - PullRequest
0 голосов
/ 03 февраля 2019

У меня проблема с настройкой базовой аутентификации для моей лямбда-функции AWS, написанной в Node.js.

Проблема:
Лямбда-функция AWS, которая является прокси для дополнительной службы.Эта функция только перенаправляет весь запрос и дает пользователю полный ответ.Вот почему мне нужно принудительно использовать заголовок Authentication, и я хотел бы иметь окно приглашения для передачи учетных данных: https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication

Помимо прокси-части моей лямбда-функции, я сосредоточился напроблема с аутентификацией, и я написал этот код:

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'

Конечная точка работает правильно, но я не могу получить окно с подсказкой для передачи учетных данных.Я настроил GatewayResponse в соответствии с этим https://medium.com/@Da_vidgf/http-basic-auth-with-api-gateway-and-serverless-5ae14ad0a270, но я не хочу предоставлять дополнительную лямбда-функцию, которая отвечает только за авторизацию пользователей.

В моем случае я могу '• авторизовать пользователей перед выполнением последней лямбда-функции, потому что эта функция только перенаправляет запрос (тоже учетные данные), ничего более.

Кто-нибудь когда-либо пытался настроить базовую аутентификацию с окном приглашения без дополнительного авторизатора с использованием?безсерверный и AWS лямбда?

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

При возврате ответа от интеграции WWW-Authenticate переназначается на X-Amzn-Remapped-WWW-Authenticate (1).Браузеры не будут обрабатывать этот переназначенный заголовок, поэтому они не отображают приглашение.

Это означает, что вам необходимо переместить логику авторизации в Lambda Authorizer на уровне HTTP-запроса и вернуть «неавторизованный» в обратный вызов какуказано в средней ссылке, на которую вы ссылались.На данный момент это единственный способ вернуть заголовок WWW-Authenticate.

Источники:

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

0 голосов
/ 03 февраля 2019

Вы не возвращаете statusCode в ответе.В статье, которую вы читаете, похоже, используется Custom Authorizer, которая всегда возвращает 401 status code с callback('Unauthorized').Ваша лямбда-функция должна возвращать соответствующий код ошибки и заголовки.

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