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

Sea*_*n M 6 python openid google-app-engine facebook

Appengine支持联合登录,其中可以将任意OpenID提供程序添加到可以对用户进行身份验证的各方列表中.但是,一些组织 - 尤其是Facebook - 不支持OpenID.如何将GAE提供的OpenID支持与支持OAuth或其他登录机制的机制相结合?

更多细节(GAE Python假设)......

我对OpenID机制​​的工作方式的理解如下:

  • 我从我的应用程序的配置选项中选择联合登录
  • 这使我可以通过该create_login_url机制轻松添加OpenID提供程序
  • 有一些Google会话管理用于跟踪经过身份验证的用户
  • 我使用login: requiredmy 控制对资源的访问app.yaml
    • 会话管理将在允许访问这些资源之前检查用户是否已通过身份验证

我遇到的问题是,我无法看到这种方法如何适合Facebook的OAuth - 如果资源是由谷歌(每个app.yaml)控制访问,哪里可以插入Facebook身份验证?

笔记:

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

Sea*_*n M 4

我对此进行了一些挖掘,我的结论是,不可能将标准 Appengine 身份验证机制(即通过 Appengine“免费”提供的机制)与 facebook 的 OAuth 集成。更具体地说,app.yaml登录控件只能与 Google 的标准机制相关,无法扩展它们以合并 facebook OAuth。其原因是 Google 的标准机制控制会话,并且没有机制来添加app.yaml登录控件可识别的新会话控件。

当然,可以将 Google 帐户和其他登录机制与 Appengine 上的 facebook 的 OAuth 集成,但要做到这一点,您需要复制 Google 在其标准身份验证机制(特别是会话管理)中提供的一些功能。

我提出了一个更普遍的问题,比较 Appengine 可能的不同社交身份验证选项,因为我认为它很有趣/有用,但稍微超出了这个问题的范围:它在这里