【问题标题】:Yahoo OAuth2 Implicit Grant flow not working for new yahoo app雅虎 OAuth2 隐式授权流程不适用于新的雅虎应用
【发布时间】:2018-12-04 09:40:12
【问题描述】:

我有现有的网络应用程序和专用的Yahoo App 工作。它使用OAuth2 Implicit Grant Flow

现在我想设置另一个按照相同原理工作的域。我用新的回调域创建了新的Yahoo App

用于获得用户同意的网址(在这两种情况下)都是https://api.login.yahoo.com/oauth2/request_auth?client_id=consumer_key&redirect_uri=https://redir_url&response_type=token

它适用于旧域和旧雅虎应用程序(消费者密钥以 -- 结尾) 但它不想使用新域和新的 Yahoo 应用程序(Consumer Key 不以 -- 结尾)。

我在查看用户同意link 后收到此消息:

开发者:请从 code、token 或 id_token 中选择响应类型 并再次提交。

虽然我提供了有效的response_token。您知道为什么它不适用于新域和新的 Yahoo 应用吗?

代码:

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');

【问题讨论】:

  • 您能在这两个实例中分享您的代码示例吗?
  • 您找到解决方案了吗?我现在面临同样的问题,看起来像 Yahoo!在 OAuth 实现中进行了一些未记录的更改。
  • @tshimkus 源代码相同,只是 client_id 不同。添加代码
  • @VishnuHaridas 还没有

标签: javascript oauth-2.0 yahoo-api


【解决方案1】:

看起来 API 要求输入文字“id_token”(或“code”或“token”)作为 response_type 参数。您没有发布代码,但听起来您实际上是在为该参数输入 response_token id 值。

查看Yahoo API documentation,这是一个与您的类似的示例 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 会话有效并最终过期的访问令牌或响应令牌。此参数描述您希望 API 返回的令牌类型。

我无法谈论您的应用的两个版本之间可能发生了什么变化,但我建议您查看 Yahoo 的 API 文档的 versioningWhat's New 部分。

【讨论】:

  • 1.我的应用程序版本相同,只是针对不同环境的键不同 2. 我使用正确的response_type=token 3. 我需要 response_type=token 而不是 response_type=id_token。我使用不同的工作流程developer.yahoo.com/oauth2/guide/flows_implicitgrant。但是我测试了您提到的那个,它也不适用于新密钥
【解决方案2】:

您可以为 response_type 参数提供 2 个不同的值。

response_type=token 的情况下 - 重定向后,您的重定向网址应附加访问令牌,如下所示:

@987654321@

但是 - 这被认为不如其他方式安全,因为在这种方式中,您会暴露访问令牌。 (例如,浏览器插件可能有权访问 URL - 然后他们可以利用这一点)

response_type=code 的情况下 - 您的重定向网址应附加一个代码,如下所示:

@987654322@

然后,您将从服务器端检索该代码,并使用您的 client_id 和 client_secret 将其发送给 OAuth2 提供者(在本例中为雅虎),以换取 access_token。这更安全,因为现在只有您的服务器端可以访问 access_token 而没有任何其他机制。按照惯例,这将是对一些雅虎端点的发布请求,如下所示:

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 以响应此请求。

【讨论】:

  • 1.我使用这个工作流developer.yahoo.com/oauth2/guide/flows_implicitgrant 所以我需要 response_type=tiken 2。重定向不会发生。此时我应该获得重定向,而是向用户显示消息 Developers: Please choose response types from code, token or id_token and submit again.
猜你喜欢
  • 2015-03-03
  • 1970-01-01
  • 1970-01-01
  • 2011-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-06
相关资源
最近更新 更多