Я пытаюсь настроить конечные точки для облачных функций, следуя статье .
. Выполнены следующие шаги:
1) Создание облачной платформы Google(GCP) и развернул следующую облачную функцию.
export const TestPost = (async (request: any, response: any) => {
response.send('Record created.');
});
с помощью следующей команды
gcloud functions deploy TestPost --runtime nodejs10 --trigger-http --region=asia-east2
Функция работает до сих пор.
2) РазвернитеКонтейнер ESP в Cloud Run выполняется с помощью следующей команды
gcloud config set run/region us-central1
gcloud beta run deploy CLOUD_RUN_SERVICE_NAME \
--image="gcr.io/endpoints-release/endpoints-runtime-serverless:1.30.0" \
--allow-unauthenticated \
--project=ESP_PROJECT_ID
Контейнер ESP также успешно развернут.
3) Создайте документ OpenAPI, описывающий API, и настройте маршруты к функциям облака..
swagger: '2.0'
info:
title: Cloud Endpoints + GCF
description: Sample API on Cloud Endpoints with a Google Cloud Functions backend
version: 1.0.0
host: HOST
schemes:
- https
produces:
- application/json
paths:
/Test:
get:
summary: Do something
operationId: Test
x-google-backend:
address: https://REGION-FUNCTIONS_PROJECT_ID.cloudfunctions.net/Test
responses:
'200':
description: A successful response
schema:
type: string
4) Разверните документ OpenAPI с помощью следующей команды
gcloud endpoints services deploy swagger.yaml
5) Настройте ESP, чтобы он мог найти конфигурацию для службы конечных точек.
gcloud beta run configurations update \
--service CLOUD_RUN_SERVICE_NAME \
--set-env-vars ENDPOINTS_SERVICE_NAME=YOUR_SERVICE_NAME \
--project ESP_PROJECT_ID
gcloud alpha functions add-iam-policy-binding FUNCTION_NAME \
--member "serviceAccount:ESP_PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
--role "roles/iam.cloudfunctions.invoker" \
--project FUNCTIONS_PROJECT_ID
Это сделано успешно
6) Отправка запросов в API
Работает абсолютно нормально.
Теперь я хотел реализовать аутентификацию, поэтому я внес следующие изменения в OpenДокумент API
swagger: '2.0'
info:
title: Cloud Endpoints + GCF
description: Sample API on Cloud Endpoints with a Google Cloud Functions backend
version: 1.0.0
host: HOST
schemes:
- https
produces:
- application/json
security:
- client-App-1: [read, write]
paths:
/Test:
get:
summary: Do something
operationId: Test
x-google-backend:
address: https://REGION-FUNCTIONS_PROJECT_ID.cloudfunctions.net/Test
responses:
'200':
description: A successful response
schema:
type: string
securityDefinitions:
client-App-1:
authorizationUrl: ""
flow: "implicit"
type: "oauth2"
scopes:
read: Grants read access
write: Grants write access
x-google-issuer: SERVICE_ACCOUNT@PROJECT.iam.gserviceaccount.com
x-google-jwks_uri: https://www.googleapis.com/robot/v1/metadata/x509/SERVICE_ACCOUNT@PROJECT.iam.gserviceaccount.com
Я создал служебную учетную запись с помощью следующей команды.
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME --display-name DISPLAY_NAME
Предоставленная роль Token Creator для служебной учетной записи с использованием следующей
gcloud projects add-iam-policy-binding PROJECT_ID --member serviceAccount:SERVICE_ACCOUNT_EMAIL --role roles/iam.serviceAccountTokenCreator
Повторное развертывание OpenAPIdocument
gcloud endpoints services deploy swagger.yaml
Теперь, когда я тестирую API, я получаю следующую ошибку
{
"code": 16,
"message": "JWT validation failed: BAD_FORMAT",
"details": [
{
"@type": "type.googleapis.com/google.rpc.DebugInfo",
"stackEntries": [],
"detail": "auth"
}
] }
Я передаю токен доступа, сгенерированный через gcloud, в запрос, используя BearerToken
cmdдля генерации токена доступа это gcloud auth application-default print-access-token
Может кто-нибудь указать, в чем здесь проблема.Спасибо ...
Редактировать # 1: Я использую Postman для подключения к моему API
После использования следующей команды я получаю другую ошибку.
Команда:
gcloud auth print-identity-token SERVICE_ACCOUNT_EMAIL
Ошибка:
{
"code": 16,
"message": "JWT validation failed: Issuer not allowed",
"details": [
{
"@type": "type.googleapis.com/google.rpc.DebugInfo",
"stackEntries": [],
"detail": "auth"
}
]
}