Eli*_*zer 5 google-app-engine oauth-2.0 google-cloud-endpoints endpoints-proto-datastore gae-userservice
我正在开发一个允许用户使用simpleauth进行身份验证的webapp .目前我将支持谷歌和Facebook.除了登录和注销(使用webapp2)之外,webapp还将包含Cloud Endpoint API.客户端将是web,Android和iOS.
我的问题是,如果用户的身份验证提供者是Facebook(或任何其他受支持的OAuth2提供商),我可以使用Endpoints Proto Datastore来user_required=True调用endpoints.get_current_user()我的用户@Model.method吗?如果不可能,这是否意味着我不应该拥有user_required=True并且应该在给定OAuth2令牌的情况下从提供者处获取永久用户ID并将其保留在数据存储区中,为该用户生成我自己的身份验证令牌,然后将该令牌传递给每个请求?
编辑:没有传递身份验证令牌,让经过身份验证的用户请求他们可以传递给API方法的"API令牌"是否有意义?这个令牌是否必须包含在POST或GET正文中,或者它是否可以放在标题/ cookie中(我在其他地方看到了有关使用Cloud Endpoints的标题和cookie的一些问题,但从那以后它已经有一段时间了).这都假设非Google身份验证不起作用.
这个答案不会直接回答您的问题,但应该让您了解如何以安全的方式实现身份验证。我最近实现了类似的东西,并花了相当多的时间来弄清楚哪种是使用 Google AppEngine 环境进行身份验证的最佳方法。
Google 支持 OpenId Connect 协议。根据Getting Started with OAuth 2.0一书,Facebook 的实现应该非常相似。我将更多地关注 Google 的实现,因为我更熟悉它,但使用其他 OAuth 提供程序时,概念应该非常相似。
id_token成功验证用户身份后,OpenId Connect 将为您提供, 。它还会给您一个access token. 访问令牌是应该保密的东西。切勿通过网络发送。另一方面,ID 令牌非常方便。它包含有关您的用户的一些信息,并且经过加密,因此不会“像这样”暴露有关用户的任何信息。您必须破解 id_token 才能找到有关用户的任何信息。万一它被破解,它也不会暴露任何关于用户的关键信息。您可以将其存储为 cookie,然后在所有后续请求中使用它,通过检查是否存在与 id_token 匹配的访问令牌来验证用户。唯一的缺点是 id_token 相当长——大约需要 650 字节。这意味着每个 http 请求都携带该有效负载。如果发送这么多信息对于您的用例来说太多了,您可以只发送前几个字符,可能是 12 个左右,然后仅匹配第一部分。id_token 在分析数据时也很有用。它会在分析 http 请求时显示,但不会透露有关用户的任何信息,您仍然可以区分来自不同用户的请求。
另外,请不要尝试使用 AppEngine 的用户服务,因为它不能很好地处理任何类型的自定义身份验证。
希望这能给您一个想法并让您走上正确的道路。
| 归档时间: |
|
| 查看次数: |
1417 次 |
| 最近记录: |