Проверка роли авторизованного авторизатора шлюза AWS API - PullRequest
0 голосов
/ 16 апреля 2019

Существует ли какой-либо способ указания разрешенных областей в методе API-шлюза, чтобы разрешенные области передавались пользовательскому авторизатору и проверялись по утверждению областей в маркере доступа.

например. Конечная точка get users может быть доступна для всех пользователей, но конечная точка create user доступна только для пользователей с областью create: user. Помимо того, что токен доступа действителен, пользовательский авторизатор будет проверять утверждение области действия в токене и сравнивать его с разрешенными областями для метода.

Предпочитает не писать разные функции авторизации для каждой комбинации требуемых областей.

Я заметил, что что-то подобное возможно в Cognito, но мой поставщик удостоверений / поставщик токенов - Auth0, поэтому я использую функцию Lambda для проверки токена доступа

С уважением

1 Ответ

0 голосов
/ 16 апреля 2019

Вы должны иметь возможность использовать один Lambda Authorizer для защиты обеих конечных точек на основе области действия токена.Вы можете использовать запрос на основе Enhanced Lambda Authorizer

. Передача токена доступа в заголовок Authorization и проверка подписи и срока действия токена доступа перед обработкой запроса.

Пример объекта Event, полученного авторизатором:

{
    "methodArn": "arn:aws:execute-api:us-east-1:XXXXXXXXXX:xxxxxx/dev/GET/hello",
    "resource": "/hello",
    "requestContext": {
        "resourceId": "xxxx",
        "apiId": "xxxxxxxxx",
        "resourcePath": "/hello",
        "httpMethod": "GET",
        "requestId": "9e04ff18-98a6-11e7-9311-ef19ba18fc8a",
        "path": "/dev/hello",
        "accountId": "XXXXXXXXXXX",
        "identity": {
            "apiKey": "",
            "sourceIp": "58.240.196.186"
        },
        "stage": "dev"
    },
    "queryStringParameters": {},
    "httpMethod": "GET",
    "pathParameters": {},
    "headers": {
        "cache-control": "no-cache",
        "x-amzn-ssl-client-hello": "AQACJAMDAAAAAAAAAAAAAAAAAAAAAAAAAAAA…",
        "Accept-Encoding": "gzip, deflate",
        "X-Forwarded-For": "54.240.196.186, 54.182.214.90",
        "Accept": "*/*",
        "User-Agent": "PostmanRuntime/6.2.5",
        "Authorization": "hello"
    },
    "stageVariables": {},
    "path": "/hello",
    "type": "REQUEST"
}

Вы можете идентифицировать запрос по комбинации event.requestContext.resourcePath и event.requestContext.httpMethod.В зависимости от типа запроса и области действия, определенных в токене, вы можете вернуть политику «Разрешено» или «Отклонено».Если, например, запрос предназначен для создания конечной точки пользователя, но токен доступа не включает в себя область действия create:user, вы вернете политику для отклонения запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...