Laravel 雅虎Oauth2/OpenIDconnect

Laravel 雅虎Oauth2/OpenIDconnect,laravel,oauth-2.0,openid-connect,Laravel,Oauth 2.0,Openid Connect,我在Oauth2上为一些IDP实现了OpenIdconnect社交登录,但我没能让Yahoo按应有的方式运行 我的问题是:每次我发送身份验证请求时,雅虎都会提示最终用户同意。虽然这在第一次登录时是正常的,但当授予权限时,它不应该反复询问同一个问题 在Yahoo上,在步骤3中提示用户,实际上是在步骤1中完成的。虽然Yahoo在第一次呼叫时提示用户不应该在每次呼叫时提示相同的同意是合乎逻辑的 Yahoo OAUTH2的其余部分工作正常。我得到了我需要的一切,虽然Yahoo不符合OpenID conn

我在Oauth2上为一些IDP实现了OpenIdconnect社交登录,但我没能让Yahoo按应有的方式运行

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

在Yahoo上,在步骤3中提示用户,实际上是在步骤1中完成的。虽然Yahoo在第一次呼叫时提示用户不应该在每次呼叫时提示相同的同意是合乎逻辑的

Yahoo OAUTH2的其余部分工作正常。我得到了我需要的一切,虽然Yahoo不符合OpenID connect,但它仍然提供了用户的唯一ID和访问令牌。这允许管理联合并保存对概要文件API的调用

我的问题:Yahoo文档在请求访问令牌时没有指定任何“范围”。文档没有提供任何“查询”属性,允许在已获得同意的情况下无缝登录。但我可能在某个地方搞砸了,因为它应该存在

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


我的演示可以在以下位置看到:它是用PHP编写的,位于Laravel-5之上。在将我的代码推到GitHub上之前,请先修复此Yahoo错误。

简短回答:如果您想使用Yahoo作为用户身份验证的源,您需要与OpenID2.0进行对话

详细回答:我认为您将SSO和授权混为一谈。OpenID Connect确实是构建在OAuth 2.0之上的SSO协议。OAuth 2.0本身用于API访问的委托

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

上一段说明了如何使用OAuth2.0访问Yahoo的API

Yahoo不支持OpenID连接,用于第三方网站用户的身份验证(SSO),它仅支持OpenID 2.0。因此,如果您想使用Yahoo作为身份验证/SSO提供者,您需要使用OpenID2.0,因为Yahoo是OpenID2.0提供者

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


FWIW:Yahoo还不是OpenID连接提供商。

我知道Yahoo还不符合OpenID,但他们在开发者页面上显示的文档流应该可以工作。即使在Oauth2中,您也不必一次又一次地请求许可。此外,Yahoo返回一个带有身份验证令牌的用户唯一ID,而我同意使用Access\u令牌不是一个有效的选项。Yahoo“xoauth_Yahoo_guid”是构建SSO的完美有效令牌,即使它不是符合OpenId connect的web.json.token。是的,在这个特定的Yahoo流中(
code
only,Yahoo的
implicit
flow是不安全的)
xoauth_Yahoo_guid
可以用于识别用户,但是Yahoo只使用严格意义上的OAuth 2.0实现。在OAuth 2.0中,刷新令牌不再需要重复的同意。如果您不使用刷新令牌或它已被撤销,则提供者将再次明确请求同意。这对于API访问是有意义的。您正在使用该机制作为SSO机制,但Yahoo仍在使用OpenID2.0。只讨论OAuth,而不是SSO。然后我将等待Yahoo实现OpenIDconnect:)我不会去实现OpenID-2,因为OpenID-2从未起飞,已经是生命的终点。也就是说,雅虎是唯一一家在每次请求时都会请求内容的提供商——另一家:Facebook、GitHub或LinkedIn——记住用户的同意,不要再请求了。Google和Orange与OpenId connect兼容的witch甚至更好。其他提供商确实使用OAuth 2.0+专有扩展(端点)进行登录,而Yahoo仍在使用OpenId 2.0+他们宣布了它(“雅虎宣布打算迁移到OpenID Connect”),但尚未跟进。对他们来说,在现有OAuth2.0的基础上构建它是相当容易的。雅虎用户将受到惩罚,直到雅虎更新OpenID connect。我在GitHub上发布了我的代码,它与其他提供商合作,与雅虎合作只是一个无聊的系统性额外许可。但除此之外,它是有效的。