如何在AppEngine上混合使用Appengine的OpenID和Facebook OAuth进行身份验证?

6 投票
2 回答
796 浏览
提问于 2025-04-17 03:38

Appengine支持联合登录,这意味着你可以添加任意的OpenID提供者,让他们来验证用户身份。不过,有些组织,比如Facebook,并不支持OpenID。那么,如何把GAE提供的OpenID支持和可以支持OAuth或其他登录方式的机制结合起来呢?

更多细节(假设使用GAE Python)……

我理解OpenID机制的工作方式大致是这样的:

  • 我在应用的配置选项中选择联合登录
  • 这让我可以通过create_login_url机制轻松添加OpenID提供者
  • 系统会使用一些Google的会话管理来跟踪已验证的用户
  • 我通过在app.yaml中使用login: required来控制对资源的访问
    • 会话管理会在允许访问这些资源之前检查用户是否已验证

我遇到的问题是,我看不出这个方法如何与Facebook的OAuth结合起来——如果资源的访问是由Google控制的(根据app.yaml),那么在哪里可以插入Facebook的身份验证呢?

备注:

  • 我知道OpenID和OAuth是不同的——我现在只对使用Facebook进行身份验证感兴趣
  • 我相信有很多不同的方法可以处理这个问题——我只是想知道是否有一些标准的方法或最佳实践

2 个回答

2

你可以看看这个叫做 Tipfy 的框架,它有一个可以让用户用 Facebook 登录的 扩展,这样你的用户就可以通过他们的 Facebook 账号来登录了。

4

我稍微研究了一下,得出的结论是,无法将标准的Appengine认证机制(也就是Appengine自带的那些)和Facebook的OAuth结合起来。更具体地说,app.yaml中的登录控制只能与Google的标准机制相关联,无法扩展到Facebook的OAuth。这是因为Google的标准机制控制了会话,而没有办法添加新的会话控制来被app.yaml的登录控制识别。

当然,可以在Appengine上将Google账户和其他登录方式与Facebook的OAuth结合,但这样做需要复制一些Google在其标准认证机制中提供的功能(特别是会话管理)。

我还提出了一个更一般性的问题,比较了在Appengine上可能的不同社交认证选项,因为我觉得这很有趣/有用,不过这有点超出这个问题的范围:你可以在这里找到。

撰写回答