如何在AppEngine上混合使用Appengine的OpenID和Facebook OAuth进行身份验证?
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 个回答
4
我稍微研究了一下,得出的结论是,无法将标准的Appengine认证机制(也就是Appengine自带的那些)和Facebook的OAuth结合起来。更具体地说,app.yaml
中的登录控制只能与Google的标准机制相关联,无法扩展到Facebook的OAuth。这是因为Google的标准机制控制了会话,而没有办法添加新的会话控制来被app.yaml
的登录控制识别。
当然,可以在Appengine上将Google账户和其他登录方式与Facebook的OAuth结合,但这样做需要复制一些Google在其标准认证机制中提供的功能(特别是会话管理)。
我还提出了一个更一般性的问题,比较了在Appengine上可能的不同社交认证选项,因为我觉得这很有趣/有用,不过这有点超出这个问题的范围:你可以在这里找到。