使用Google Auth库验证JWT

时间:2019-04-24 00:08:20

标签: python google-app-engine authentication cryptography jwt

我正在尝试根据此example验证Google IAP生成的JWT。我正在使用App Engine和Python 3.7,这意味着我不能使用与示例相同的库,因为它不会与App Engine work一起使用。

正在寻找我尝试使用google.auth的替代方法,但它不适用于任何JTW。我使用https://jwt.io中的工具创建了此令牌作为示例::

from google.auth import jwt
token = 'eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkxZeVAyZyJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.OjJokSnHIdMxqTlpT055GJDe72-zoTZBE5NISmrDPx0dletHBTnlbl1wwr0EhWaxgKIesZ7N7eLd4XW-TgX-vA'
cert = '-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEEVs/o5+uQbTjL3chynL4wXgUg2R9\nq9UU8I5mEovUf86QZ7kOBIjJwqnzD1omageEHWwHdBO6B+dFabmdT9POxg==\n-----END PUBLIC KEY-----\n'
jwt.decode(token, certs=cert)

但是出现以下错误:

/tests/jwt/google_auth/venv/lib/python3.5/site-packages/rsa/pem.py", line 92, in load_pem
    raise ValueError('No PEM start marker "%s" found' % pem_start)
ValueError: No PEM start marker "b'-----BEGIN RSA PUBLIC KEY-----'" found

这让我想知道jwt模块为什么不能解码使用EC256算法创建的令牌,因为Google IAP使用的算法是这样。

所以有人知道为什么会这样吗? 您能推荐一个替代方法吗?

注意:在寻找其他替代方案时,我还发现了ecdsa python实现,但是我不允许使用它(安全团队不允许这样做)。

2 个答案:

答案 0 :(得分:0)

您需要从

之前的键中删除-----BEGIN RSA PUBLIC KEY----------END PUBLIC KEY-----部分

答案 1 :(得分:0)

很显然,不可能使用带有Google身份验证的ES256的J256来验证JWT:https://github.com/googleapis/google-auth-library-python/issues/336#issuecomment-486748042

因此,如果有人尝试使用App Engine进行此操作,则唯一的选择是: https://github.com/warner/python-ecdsa