«К запросу не привязан токен аутентификации» с конечными точками Google Coud + аутентификация Firebase

Я разрабатываю бэкэнд для мобильного приложения с использованием стандартной среды Google App Engine (Python) и облачных конечных точек с Firebase для аутентификации. Этот бэкэнд должен подключаться к интерфейсу, созданному с помощью Unity.

У меня возникают проблемы с облачными конечными точками при чтении токена аутентификации, отправляемого из интерфейса Unity после входа в Firebase. App Engine регистрирует состояние «К запросу не прикреплен токен аутентификации» при каждой попытке отправки запроса с проверкой подлинности.

Вот объявление Cloud Endpoints, которое включает Firebase в качестве эмитента в моем основном файле Python:

@endpoints.api(name='connected', 
    version='v4.4.0', 
    allowed_client_ids=["32366828803-g14dan8j9m1dhises6namb5vpebopgpd.apps.googleusercontent.com "],
    issuers = {'firebase': endpoints.Issuer('https://securetoken.google.com/fleet-fortress-211105',
    'https://www.googleapis.com/service_accounts/v1/metadata/x509/[email protected]')})

Вот конец файла swagger.yaml с определениями безопасности:

securityDefinitions:
    firebase:
        authorizationUrl: ''
        flow: implicit
        type: oauth2
        x-google-issuer: 'https://securetoken.google.com/fleet-fortress-211105'
        x-google-jwks_uri: 'https://www.googleapis.com/service_accounts/v1/metadata/x509/[email protected]'
        x-google-audiences: "32366828803-g14dan8j9m1dhises6namb5vpebopgpd.apps.googleusercontent.com"

security:
    - firebase: []

Я отправляю токен аутентификации, полученный от Firebase, на мой Cloud Endpoints API в заголовке авторизации (например, Authorization: Bearer {token}).

Отправляемые заголовки: заголовки запросов

Декодированный JWT отправляется в заголовке авторизации как Bearer:

{
"iss": "https://securetoken.google.com/fleet-fortress-211105",
"aud": "fleet-fortress-211105",
"auth_time": 1533831541,
"user_id": "8VdGVw9cF8V9QtfIZpgnD4DHKsY2",
"sub": "8VdGVw9cF8V9QtfIZpgnD4DHKsY2",
"iat": 1533831566,
"exp": 1533835166,
"email": "[email protected]",
"email_verified": false,
"firebase": {
  "identities": {
    "email": [
      "[email protected]"
    ]
  },
  "sign_in_provider": "password"
}
}

Приветствуется любая помощь в получении моей серверной частью облачных конечных точек GAE чтения заголовка авторизации для JWT.

Так же, как проверка работоспособности, если вы захватите полный запрос (например, измените конечную точку запроса на службу, печатающую весь запрос, включая полные заголовки), правильно ли прикреплен заголовок? к токену прикреплен действительный JWT?

Jofre 09.08.2018 18:00

Да, заголовок авторизации действительно отправляется (казалось бы, правильно), и JWT действительно действителен. Я обновил сообщение, чтобы показать отправленные заголовки и JWT.

igotquestions1 09.08.2018 19:32

Есть ли опечатка с отступом в файле swagger.yaml, который вы вставили сюда? Похоже, что все поля находятся на одном уровне, но они должны быть вложены (с отступом) в "firebase".

John 10.08.2018 19:08

Я только что проверил фактический файл, и при вставке произошла опечатка с отступом, чтобы задать этот вопрос, как вы сказали. Фактический файл имеет поля "firebase" с отступом. Вопрос исправлен, приношу свои извинения.

igotquestions1 11.08.2018 02:53

Ошибка, которую вы получаете, "похоже" означает, что заголовок вообще не отправлен. Если мы посмотрим на обычный Список ошибок JWT, то «К запросу не прикреплен токен аутентификации» среди них нет. Лучший способ устранить эту проблему - определить, где именно возникла ошибка (т. Е. Удаляется заголовок). Если вы вручную вызываете свой API, генерирующий JWT, отвечает ли API должным образом? Если это так, проблема до достижения GCP. В противном случае проблема в GCP.

Jofre 13.08.2018 12:12

Я вручную вызвал свой API с помощью Postman и отправил JWT, полученный от Firebase, в заголовке авторизации. Я почти уверен, что проблема в GCP. Кроме того, консоль Firebase показывает, что вход в систему действительно произошел.

igotquestions1 13.08.2018 18:38
Интеграция Angular - Firebase Analytics
Интеграция Angular - Firebase Analytics
Узнайте, как настроить Firebase Analytics и отслеживать поведение пользователей в вашем приложении Angular.
0
6
367
1

Ответы 1

Я не знаю, почему эта ошибка регистрируется; заголовок авторизации правильно содержит токен на предъявителя, который и требуется.

Однако это сообщение об ошибке не должно фактически останавливать работу аутентификации. (Система аутентификации в Python Frameworks представляет собой беспорядок, и есть две параллельные, в основном работающие реализации.)

Вместо этого вам нужно вызывать endpoints.get_current_user() в каждом методе, который вы хотите защитить.

Другие вопросы по теме