我正在使用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的授权标头方面的任何帮助都将不胜感激。
答案 0 :(得分:0)
我不知道为什么会记录该错误;授权标头正确包含一个Bearer令牌,这是必需的。
但是,该错误消息实际上不应停止身份验证的工作。 (Python框架中的身份验证系统有点混乱,并且有两个并行的大多数有效的实现。)
相反,您需要在每个要保护的方法中调用endpoints.get_current_user()
。