get_current_user()返回None,因为"观众不被允许"云端点中的警告

时间:2014-11-04 15:43:51

标签: android python google-app-engine google-cloud-endpoints

我收到了#34;观众不允许"在尝试通过Android应用程序通过Google Cloud Endpoints发出经过身份验证的请求时,在我的Google开发者控制台日志中发出警告。

查看端点源代码,对应于:

aud = parsed_token.get('aud')

cid = parsed_token.get('azp')
if aud != cid and aud not in audiences:
    logging.warning('Audience not allowed: %s', aud)

我在Android应用中的调用代码:

public static final String WEB_CLIENT_ID = "web-client-id.apps.googleusercontent.com";
public static final String AUDIENCE = "server:client_id:" + WEB_CLIENT_ID;

GoogleAccountCredential credential = GoogleAccountCredential.usingAudience(
        mContext,
        AUDIENCE
);

Grapi.Builder builder = new Grapi.Builder(HTTP_TRANSPORT,
        JSON_FACTORY, credential);
Grapi service = builder.build()

其中" web-client-id"是谷歌开发者控制台中生成的字母数字客户端ID。此服务用于进行经过身份验证的呼叫。

这也是我的后端python代码中传递给api修饰符的WEB_CLIENT_ID:

WEB_CLIENT_ID = 'web-client-id.apps.googleusercontent.com'
ANDROID_CLIENT_ID = 'android-client-id.apps.googleusercontent.com'
ANDROID_AUDIENCE = WEB_CLIENT_ID
grapi_client_ids = [ANDROID_CLIENT_ID,
                    WEB_CLIENT_ID,
                    endpoints.API_EXPLORER_CLIENT_ID]
grapi_audiences = [ANDROID_AUDIENCE]

@endpoints.api(name='grapi', version='v1',
               allowed_client_ids=grapi_client_ids, audiences=grapi_audiences,
               scopes=[endpoints.EMAIL_SCOPE])

看起来所有这些都导致endpoints.get_current_user()返回None,并且我的经过身份验证的调用失败。

1 个答案:

答案 0 :(得分:0)

当我在python后端初始化我的web客户端id和android客户端id变量时,我使用反斜杠来继续行以符合PEP8(80个字符行长度),即。

WEB_CLIENT_ID = 'web-client-id'\
                '.apps.googleusercontent.com'
ANDROID_CLIENT_ID = 'android-client-id'\
                    '.apps.googleusercontent.com'

我不确定为什么没有正确读取,但是当我在括号内使用续行时,它工作正常。

WEB_CLIENT_ID = ('web-client-id'
                 '.apps.googleusercontent.com')
ANDROID_CLIENT_ID = ('android-client-id'
                     '.apps.googleusercontent.com')