繁体   English   中英

如何使用google python oauth库来实现OpenID Connect?

[英]How to use google python oauth libraries to implement OpenID Connect?

我正在评估python App Engine灵活环境中的不同身份验证选项,适用于在G Suite域中运行的应用程序。

我想放在一起ID连接“服务器流”说明这里有多么谷歌认证-库的Python实现了一般的OAuth2说明这里

我有点跟进,直到4.访问令牌和ID令牌的交换代码 ,看起来像flow.fetch_token ,除了它说“响应此请求包含JSON数组中的以下字段”,它不仅包括访问权限令牌,但id令牌和其他东西。 我确实看到了这个补丁库 这是否意味着我可以使用一些flow.fetch_token来创建IDTokenCredentials (如何?)然后使用它来构建一个OpenID Connect API客户端(以及该API记录在哪里)? 那么验证id令牌呢,是否有一个单独的python库来帮助它或者是API库的一部分?

这一切都非常令人困惑。 一些实际的“汤到坚果”示例代码将清理很多,但我在互联网上找不到任何东西,这让我觉得(a)也许这不是一种可行的认证方式,或者(b) )最近python库还没赶上? 但是,我宁愿在服务器上进行身份验证,也不愿在使用Google登录的客户端进行身份验证。

任何建议或代码链接都非常感谢。

似乎Google的python库包含一个用于id令牌验证的模块。 这可以在google.oauth2.id_token模块中找到。 验证后,它将返回已解码的令牌,您可以使用该令牌获取用户信息。

from google.oauth2 import id_token
from google.auth.transport import requests

request = requests.Request()

id_info = id_token.verify_oauth2_token(
    token, request, 'my-client-id.example.com')

if id_info['iss'] != 'https://accounts.google.com':
    raise ValueError('Wrong issuer.')

userid = id_info['sub']

获取用户信息后,应按照验证用户部分中所述遵循身份验证过程。

好的,我想我现在在源代码中找到了答案。

google.oauth2.credentials.Credentials公开了id_token

根据授权服务器和请求的范围,可以在获取凭据时填充,并在调用refreshrefresh凭据。 此令牌是JWT。 它可以使用google.oauth2.id_token.verify_oauth2_token进行验证和解码[如@ kavindu-dodanduwa指出]。

在调用堆栈下面的几层,我们可以看到fetch_token对响应JSON进行了一些最小的验证(检查是否返回了访问令牌等),但基本上是通过令牌端点获取的任何内容,包括(即,如果是OpenID Connect)范围包括)id标记作为JWT。

编辑:

最后一个难题是将标记从(通用)OAuthSession转换为google_auth_oauthlib.helpers中的 (特定于Google)凭据,其中id_token被抓取(如果存在)。

请注意, 通用的oauthlib库现在似乎确实实现了OpenID Connect ,但看起来是非常新的并且正在进行中(2018年7月)。 谷歌目前似乎没有使用任何此类功能(这让我有点失望)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM