1

我在 Oauth2 上为少数 IDP 实现了 OpenIdconnect 社交登录,但我未能让 Yahoo 以应有的方式行事。

我的问题:每次我发送身份验证请求时,雅虎都会提示最终用户同意。虽然这在第一次登录时是正常的,但当授予权限时,它不应该一遍又一遍地询问同一个问题。

在步骤 3 中的https://developer.yahoo.com/oauth2/guide/雅虎提示用户上,实际上它是在步骤 1 中完成的。虽然雅虎在第一次调用https://api.login.yahoo.com/oauth2/request_auth时提示用户是合乎逻辑的,但它不应该在彼此调用时提示相同的同意。

Yahoo OAUTH2 的其余部分工作正常。我得到了我需要的一切,虽然 Yahoo 不兼容 OpenID-connect,但它仍然为用户的唯一 ID 提供了 access_token。这允许管理联合并保存对配置文件 API 的调用。

我的问题:雅虎文档在请求 access_token 时没有指定任何“范围”。文档没有提供任何“查询”属性,允许在同意已经到位时进行无缝登录。但我可能在某个地方搞砸了,因为它应该存在!

问题:是否有人成功使用雅虎 OAUTH2 并在每次登录时避免同意提示?

我的演示可见:http : //oidconnect.breizhme.net/demo/openidconnect/home 它是在 Laravel-5 之上用 PHP 编写的。在将我的代码推送到 GitHub 之前,我很乐意修复此 Yahoo 错误。

4

1 回答 1

2

简短的回答:如果您想使用 Yahoo 作为用户身份验证的来源,您需要使用 OpenID 2.0。

长答案:我相信您将 SSO 和授权混为一谈。OpenID Connect 确实是建立在 OAuth 2.0 之上的 SSO 协议。OAuth 2.0 本身用于授权 API 访问。

对于访问其 API(授权)的客户端(非用户),雅虎支持 OAuth 2.0。需要代表雅虎用户访问雅虎 API 的客户端可以通过使用 OAuth 2.0 授权码授权获取访问令牌,这意味着雅虎用户登录同意。除了访问令牌之外,客户端还在该流中获取刷新令牌。当当前令牌过期时,它可以使用刷新令牌获取新的访问令牌。如您所见,当客户端需要新的访问令牌时,刷新令牌允许我们不再打扰 Yahoo 用户。

上一段展示了如何使用 OAuth 2.0 访问 Yahoo 的 API。

雅虎不支持OpenID Connect for Authentication ( SSO )用户到 3rd-party 网站,它只支持 OpenID 2.0 用于此目的。因此,如果您想使用 Yahoo 作为身份验证/SSO 提供者,则需要使用 OpenID 2.0,因为 Yahoo是 OpenID 2.0 提供者

您遇到的情况是您尝试使用 OAuth 2.0 协议作为用户身份验证协议(或:OAuth 2.0 提供程序作为身份验证提供程序)。这可能会有严重的并发症,请参阅http://oauth.net/articles/authentication/

FWIW:雅虎还不是 OpenID Connect 提供商。

于 2015-01-05T22:49:04.057 回答