我正在尝试为我的网站创建一个登录系统,允许通过 Google 的 API 进行身份验证和访问任何支持 OAuth 的 Google 数据 API,同时理想情况下只向用户显示一个提示,无论他是创建帐户还是登录他现有的。我想尽量减少他被要求批准的次数。
我知道谷歌为此目的提供了混合 OpenID/OAuth,但问题是每次我向我的 OpenID 请求添加 OAuth 扩展时,它永远不会记住用户对该请求的批准。当我进行混合 OpenID/OAuth 时,有什么方法可以记住批准?如果我只是在没有 OAuth 扩展的情况下执行 OpenID,那么一切都会很好地记住,并且不会一直用提示来干扰用户。
除了我的 OpenID 请求之外,这是我发送的相关扩展,这导致我获得 OAuth 请求令牌(好)但导致批准永远不会被记住(坏)。
PHP 语法:
$args["openid.ns.ext2"] = 'http://specs.openid.net/extensions/oauth/1.0';
$args["openid.ext2.consumer"] = 'www.MYSITE.com';
$args["openid.ext2.scope"] = 'http://www-opensocial.googleusercontent.com/api/people/';
$args["openid.mode"] = 'checkid_setup';
$args["openid.realm"] = 'http://www.MYSITE.com/';
Hybrid OpenID/OAuth 以这种方式行事是否正常(不记得最后一次 OAuth 授权)?解决这个问题的最佳方法是什么?我曾想过在用户的计算机上存储 cookie 以链接到我的数据库中的某个位置,这样我就可以再次使用最后一个访问令牌,等等......(这里的问题是我不知道要查找谁的令牌,除非我知道谁用户是......一个循环问题)。并且执行仅 OpenID 请求以获取他的用户 ID 以查看他是否有帐户以查找他的访问令牌,然后执行 OpenID+OAuth 请求(如果未存储他的访问令牌)将导致两个提示,这真的无济于事。
看起来 Hybrid 似乎只支持 OAuth 1.0,我认为它在 2015 年之前都很好,所以现在对我来说这不是问题。我假设他们将来会支持 OAuth 2.0。
checkid_immediate是否与此相关?我只是不确定如何使用它来完成我想要的。