401 означает, что аутентификация пользователя не может быть установлена. По сути, JWT либо неисправен, либо ему не предоставляется запрос в заголовке, который ожидает API-шлюз.
Кроме того, API-шлюз не является полноценным сервером, поэтому не будет отлаживать, как API шлюз использует JWT. Несмотря на то, что это может быть обломом, пожалуйста, обратите внимание, что он предоставляет вам масштабируемую, надежную и дешевую конечную точку HTTP для вашего бэкэнда со встроенной поддержкой аутентификации на основе JWT, и он только что стал доступен в большинстве регионов. Так что я бы пока не вычеркнул это.
Возвращаясь к вашему вопросу. Хотя я не знаю, как помочь с отладочной частью. Я могу рассказать вам о шагах, которые я предпринял, чтобы поэкспериментировать с JWT-авторизатором, не написав ни одной строки кода.
- Создал временный JWK с помощью https://mkjwk.org/, который дает вам возможность опубликовать c ключ и личный + publi c набор ключей с использованием kid на ваш выбор и RS256 al go
- Скопируйте ключ publi c и вставьте его в свой ISSUER_URL / .well известный / jwks. json. Если вы не используете Cognito, вы можете провести эксперимент с размещением файла в S3 (в этом случае ваш URL-адрес корзины S3 становится URL-адресом эмитента). При использовании S3 вам также потребуется создать файл ISSUER_URL / .well_known / openid-configuration и сделать эти файлы общедоступными на время эксперимента. Эти файлы следуют стандартному формату (OID C), который вы можете искать в Интернете. Обратите внимание, что файл jwks. json содержит только ключ publi c, поэтому не имеет значения, попадет ли кто-нибудь в руки.
- Возьмите private + publi c набор пар ключей и от go до https://8gwifi.org/jwkconvertfunctions.jsp, чтобы получить отдельные закрытые и публичные c RSA ключи Pem
- Go до https://jwt.io/ и выбрать RS256 al go, утверждение заголовка kid (с использованием того же значения, которое использовалось для генерации ключей на первом шаге), утверждение aud в полезной нагрузке (это должно соответствовать выбранной вами конфигурации при настройке JWT-авторизатора в HTTP API-шлюзе) утверждение iss в полезной нагрузке (должно соответствовать ISSUER_URL), утверждение exp в полезной нагрузке (время истечения JWT можно использовать https://www.epochconverter.com/), nbf заявка в полезной нагрузке (просто взять текущую метку времени из https://www.epochconverter.com/), а также публичные c и частные RSA pem ключи, которые вы получили на предыдущем шаге, должны быть помещены в соответствующий раздел подписи. Также предоставьте заявление о полезной нагрузке scp , если вы задали область авторизации при настройке JWT-авторизатора с HTTP-шлюзом API
После всего этого я смог протестировать этот API шлюз смог работать с JWT, который я сгенерировал. Теперь я могу go о кодировании этой вещи с большей уверенностью и, к счастью, в JAVA, node, et c уже есть инструменты.