Yahoo OAuth2隐式授予流不适用于新的Yahoo应用

时间:2018-12-04 09:40:12

标签: javascript oauth-2.0 yahoo-api

我有现有的Web应用程序,并且专门工作Yahoo App。它使用OAuth2 Implicit Grant Flow

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

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

它适用于旧域和旧Yahoo App(消费密钥以-结尾) 但它不想与新域和新Yahoo应用一起使用(由于某种原因,Consumer Key不能以-结尾)。

我在征得用户同意link后收到此消息:

  

开发人员:请从代码,令牌或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');

2 个答案:

答案 0 :(得分:1)

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

看看Yahoo API documentation,下面是与您的网址相似的示例网址:

  

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 :(得分:0)

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

对于response_type=token-重定向后,您的重定向URL应该附加访问令牌,如下所示:

http://myurl/?access_token=XXXYYY

但是-这被认为没有其他方法安全,因为在这种情况下,您将暴露访问令牌。 (例如,浏览器插件可能有权访问该URL,然后他们可以利用该URL)

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

https://myurl/?code=XXXYYY

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

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。