Рекомендации по использованию id_token и access_token в AWS Lambda

#amazon-web-services #api #authentication #oauth-2.0 #openid

#amazon-web-services #API #аутентификация #oauth-2.0 #OpenID

Вопрос:

Рассмотрим серверную часть restapi, состоящую из AWS-APIGateway и -Lambda.

После успешной проверки подлинности oauth2 AWS Cognito возвращает клиенту как access_token, так и id_token в потоке предоставления авторизации кода.

Во время вызовов api лямбда-функции необходимо знать адрес электронной почты прошедшего проверку подлинности клиента, поэтому у меня в основном есть 2 варианта:

  1. Отправьте id_token в Authorization заголовке, который проверяется APIGateway и передается в Lambda. Пусть Lambda расшифрует id_token и получит доступ к адресу электронной почты, содержащемуся в нем.
  2. Отправьте access_token в Authorization заголовке, который проверяется APIGateway с scope=openid email помощью и передается в Lambda. Пусть Lambda GET вызовет /oauth2/userinfo конечную точку с access_token в Authorization заголовке, чтобы получить адрес электронной почты.

Что из обоих является лучшей практикой? Почему?

Ответ №1:

Хороший вопрос:

  • Токены доступа предназначены для использования в качестве недолговечных учетных данных API, содержащих области / утверждения и т. Д
  • Токены Id играют другую роль, предоставляя клиенту подтверждение аутентификации, как в моем сообщении в блоге

Однако, если вы используете AWS Cognito, существует ограничение поставщика, согласно которому токены доступа нельзя настраивать — например, для указания адреса электронной почты.

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

То есть предпочтительнее использовать вариант 2, а не использовать токен id неестественным способом.

Для получения дополнительной информации об этом шаблоне проектирования см.:

Не уверен, что вы изучаете пользовательские средства авторизации API Gateway, но если да, то в моем блоге есть кое-что об этом здесь

Комментарии:

1. Почему AWS Cognito решила не включать запрос электронной почты в токен доступа, мне не понять. По крайней мере, они должны предоставить его в качестве опции для его включения.

2. Отсутствие поддержки обработки утверждений в токенах доступа не очень хорошо. Однако вы можете получить электронное письмо, отправив токен доступа на конечную точку user info.

3. Верно, но обходные пути (вызов конечной точки user info или реализация собственных внутренних полей электронной почты и т. Д.) Сводят на нет одно из преимуществ использования токенов, т. Е. Отсутствие необходимости выполнять поиск в БД или кешировать для каждого взаимодействия с API, если вы полагаетесь на поле email. Но я согласен, по крайней мере, вы можете обойти это.