Yahoo OAuth2隐式授权流不适用于新的Yahoo应用程序

bfnvny8b  于 2022-11-21  发布在  其他
关注(0)|答案(3)|浏览(154)

我 有 现有 的 Web 应用 程序 和 专用 的 Yahoo App 工作 。 它 使用 OAuth2 Implicit Grant Flow
现在 , 我 想 建立 另 一 个 域 , 以 相同 的 原理 工作 。 我 已经 创建 了 新 的 Yahoo App 和 新 的 回调 域

用于 获取 用户 同意 的 URL ( 在 两 种 情况 下 ) 均 为 https://api.login.yahoo.com/oauth2/request_auth?client_id=consumer_key&redirect_uri=https://redir_url&response_type=token
它 适用 于 旧 域 和 旧 雅虎 应用 程序 ( 消费 者 密钥 以 - - 结尾 ) , 但 它 不 想 使用 新 域 和 新 雅虎 应用 程序 ( 消费 者 密钥 不 以 - - 结尾 , 出于 某种 原因 ) 。
我 在 查看 用户 同意 link 后 收到 此 消息 :
开发 人员 : 请 从 代码 、 令牌 或 id _ token 中 选择 响应 类型 , 然后 重新 提交 。
虽然 我 提供 了 有效 的 * response _ token * 。 你 知道 为什么 它 不 工作 的 新 域名 和 新 的 雅虎 应用 程序 的 原因 吗 ?
密码 :

var authorizationUrl = 'https://api.login.yahoo.com/oauth2/request_auth'
            + '?client_id=' + encodeURIComponent(consumerKey)
            + '&redirect_uri=' + encodeURIComponent(redirectUri)
            + '&response_type=token';

window.open(authorizationUrl, '_blank', 'location=yes,height=570,width=650,scrollbars=yes,status=yes');

中 的 每 一 个

ddarikpa

ddarikpa1#

看起来API要求使用字面单词“id_token”(或“code”或“token”)作为response_type参数。您没有发布代码,但听起来您实际上是在为该参数输入response_token id值。
看一下Yahoo API documentation,下面是一个与您的URL类似的示例URL:
https://api.login.yahoo.com/oauth2/request_auth?client_id=dj0yJmk9WGx0QlE0UWdCa0hKJmQ9WVdrOWNrNUhXVnBhTkhFbWNHbzlNQS0tJnM9Y29uc3VtZXJzZWNyZXQmeD01OA--&response_type=id_token&redirect_uri=https://yahoo.com&scope=openid%20mail-r&nonce=YihsFwGKgt3KJUh6tPs2
你可以看到他们写道:&response_type=id_token,而不是&response_type=934984kklsdkjklfs或类似值。
一般而言,OAuth API呼叫通常会传回对您的API阶段作业有效且最终会过期的存取Token或回应Token。此参数描述您希望API传回的Token类型。
我不能说你的应用程序的两个版本之间可能有什么变化,但我建议你看看雅虎的API文档的versioningWhat's New部分。

bvn4nwqk

bvn4nwqk2#

您可以为response_type参数提供2个不同的值。
response_type=token的情况下-在重定向之后,您的重定向url应该附加访问令牌,如下所示:
[http://myurl/?access_token=XXXYYY](http://myurl/?access_token=XXXYYY)
然而--这被认为比另一种方式更不安全,因为在这种方式中,你会暴露访问令牌。(例如,浏览器插件可能可以访问URL --它们可以利用这一点)
response_type=code的情况下-您的重定向网址应该附加一个代码,如下所示:
[https://myurl/?code=XXXYYY](https://myurl/?code=XXXYYY)
然后从服务器端检索该代码,并将其与client_id和client_secret一起发送给OAuth2提供商(在本例中为Yahoo),以交换access_token。这更安全,因为现在只有服务器端可以访问access_token,而没有任何其他机制。通常,它将是对某个Yahoo端点的post请求,如下所示:

http.post(
  url: 'someyahoourl', /* probably something like https://api.login.yahoo.com/oauth2/request_auth */
  data:
  {
     client_secret: yourclientsecret,
     client_id: yourclientid, /* Judging by the url it's dj0yJmk9WGx0QlE0UWdCa0hKJmQ9WVdrOWNrNUhXVnBhTkhFbWNHbzlNQS0tJnM9Y29uc3VtZXJzZWNyZXQmeD01OA-- */
     code: thecodefromurl,
     grant_type: 'authorization_code',
     redirect_uri: the redirect uri that you've retrieved the code from
  }

然后服务器将获得access_token以响应此请求。

cgyqldqp

cgyqldqp3#

It appears that they no longer support this flow: 的 最 大 值
由于 OAuth2 隐 式 流 中 存在 许多 安全 漏洞 , 因此 不 推荐 使用 对此 流 的 支持 。 请 使用 所 述 的 OAuth2 授权 代码 流 here
浏览 文档 , 它们 似乎 只 支持 授权 代码 流 :
根据 OAuth 2.0 规范 , 访问 用户 ( 资源 所有 者 ) 数据 的 授权 可以 使用 四 种 授权 类型 来 获得 。 Yahoo 目前 支持 四 种 授权 类型 中 的 一 种 :

  • 授权 码 授予 :此 授权 类型 用于 获取 访问 令牌 , 该 令牌 可 用于 授权 访问 Yahoo API 。

这 对于 客户 端 应用 程序 可能 并 不 理想 :
当 您 有 服务 器 端 ( Web ) 应用 程序 时 , 应该 使用 这个 流程 。

相关问题