1

我正在尝试使用 Google 服务帐户对 Google Cloud Endpoints API 实施服务到服务身份验证,但出现以下错误。

Cannot decode and verify the auth token. The backend will not be able to retrieve user info (.../lib/endpoints_management/control/wsgi.py:596)
Traceback (most recent call last):
  File ".../lib/endpoints_management/control/wsgi.py", line 593, in __call__
    service_name)
  File ".../lib/endpoints_management/auth/tokens.py", line 81, in authenticate
    error)
UnauthenticatedException: (u'Cannot decode the auth token', UnicodeDecodeError('ascii', '\xc9\xad\xbd', 0, 1, 'ordinal not in range(128)'))

传递给 self.get_jwt_claims(auth_token) 的 auth_token 变量的值是:

ya29.ElmlBB1mwIfrsnURUIQg0Nv6v5UPzFR02miD4w_VywMSlWGDstpmmc5vPsmUqt5rCcho797B1HeEOgT0UBQiVfv9dlsfxSMLRf67SGwX0ceK5uTujj4_tSUXog

看起来端点库正在尝试将 auth_token 解码为 jwt,但 auth_token 不是 jwt。但也许我错了。当我尝试使用 API Explorer 测试 API 时,也会出现同样的问题。最新端点和旧版本都会发生这种情况。

这是我的 API 类:

@endpoints.api(
    name='myapi',
    version='v1',
    api_key_required=True,
    auth_level=endpoints.AUTH_LEVEL.REQUIRED,
    scopes=(
        endpoints.EMAIL_SCOPE,
    ),
)
class MyApi(remote.Service):
    ...

这就是我访问 API 的方式:

credentials = ServiceAccountCredentials.from_json_keyfile_dict(
    json.loads(json_keyfile_data),
    scopes='https://www.googleapis.com/auth/userinfo.email',
)
service = build(
    name, version,
    http=credentials.authorize(Http()),
    discoveryServiceUrl=discovery_url)
...

我是在做一些事情还是 Python 端点库中存在错误?

4

1 回答 1

0

Google Cloud Endpoints 需要 JWT id_token,这就是 self.get_jwt_claims(auth_token) 失败的原因。以下是对服务到服务身份验证的深入解释:https ://cloud.google.com/endpoints/docs/service-to-service-auth 。

于 2017-08-14T08:58:13.543 回答