使用Google Coud Endpoints + Firebase身份验证时,“没有身份验证令牌附加到请求中”

时间:2018-08-08 21:08:35

标签: firebase unity3d google-cloud-platform jwt google-cloud-endpoints

我正在使用Google App Engine标准环境(Python)和带有Firebase的Cloud Endpoints进行身份验证来开发移动应用程序的后端。该后端需要连接到使用Unity创建的前端。

我在使用Cloud Endpoints读取Firebase登录后从Unity前端发送的身份验证令牌时遇到麻烦。 App Engine的状态分别为“未向请求附加身份验证令牌”尝试发送经过身份验证的请求。

这是Cloud Endpoints声明,其中在我的主要Python文件中包括Firebase作为发行者:

@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/securetoken@system.gserviceaccount.com')})

这是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/securetoken@system.gserviceaccount.com'
        x-google-audiences: "32366828803-g14dan8j9m1dhises6namb5vpebopgpd.apps.googleusercontent.com"

security:
    - firebase: []

我将从Firebase接收到的auth令牌发送到Authorization标头中的Cloud Endpoints API(例如Authorization:Bearer {token})。

正在发送的标题: request headers

已解码的JWT在授权标头中作为承载发送:

{
"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": "XXXX@gmail.com",
"email_verified": false,
"firebase": {
  "identities": {
    "email": [
      "XXXX@gmail.com"
    ]
  },
  "sign_in_provider": "password"
}
}

在获取我的GAE Cloud Endpoints后端以读取JWT的授权标头方面的任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

我不知道为什么会记录该错误;授权标头正确包含一个Bearer令牌,这是必需的。

但是,该错误消息实际上不应停止身份验证的工作。 (Python框架中的身份验证系统有点混乱,并且有两个并行的大多数有效的实现。)

相反,您需要在每个要保护的方法中调用endpoints.get_current_user()