【问题标题】:Yahoo Oauth2/OpenIDconnect雅虎 Oauth2/OpenIDconnect
【发布时间】:2015-03-03 12:53:01
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

    标签: laravel oauth-2.0 openid-connect


    【解决方案1】:

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

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

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

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

    Yahoo支持用户到第 3 方网站的 身份验证 (SSO) OpenID Connect,为此,它仅支持 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 提供商。

    【讨论】:

    • 我知道雅虎“尚未”兼容 openid,但它们在开发人员页面上显示的文档流应该可以工作。即使在 Oauth2 中,您也不必一遍又一遍地请求许可。此外,雅虎返回一个带有身份验证令牌的用户唯一 ID,而我同意使用 Access_token 不是一个有效的选项。 Yahoo 'xoauth_yahoo_guid' 是构建 SSO 的完美有效令牌,即使它不是符合 OpenId-connect 的 web.json.token。
    • 是的,在这个特定的 Yahoo 流程中(仅限 code,Yahoo 的 implicit 流程不安全)xoauth_yahoo_guid 可用于识别用户,但 Yahoo 仅使用其 OAuth 2.0 实现严格的 OAuth 意义。在 OAuth 2.0 中,刷新令牌不再需要重复同意。如果您不使用刷新令牌或它被撤销,那么提供者将再次明确征求同意。这对于 API 访问是有意义的。您将该机制用作 SSO 机制,但 Yahoo 仍在 OpenID 2.0 上。 developer.yahoo.com/oauth2/guide 只讨论 OAuth,而不是 SSO。
    • 然后我将等待 Yahoo 实施 OpenIDconnect :) 我不会实施 OpenID-2,它从未起飞并且已经结束生命。话虽这么说,雅虎是唯一一个在每次请求时都要求内容的提供商:Facebook、GitHub 或 LinkedIn 记住用户同意,不要再要求第二次。 Google 和 Orange 都符合 OpenId-connect 标准,甚至更好。
    • 其他提供商确实使用 OAuth 2.0 + 专有扩展(端点)进行登录,这与雅虎仍在库存 OpenID 2.0 不同; +1 将 Yahoo 推向 OpenID Connect :-) 他们宣布了这一点(“Yahoo 宣布了迁移到 OpenID Connect 的意图”),但尚未跟进。对他们来说,在他们现有的 OAuth 2.0 基础上构建它会很容易。
    • 雅虎用户将受到惩罚,直到雅虎更新到 OpenID-connect。我在 GitHub github.com/fulup-bzh/OidConnect 上发布了我的代码,它适用于所有其他提供商,而雅虎只是一个无聊的系统性额外同意。但除此之外它还有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-25
    • 1970-01-01
    相关资源
    最近更新 更多