我 有 现有 的 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');
中 的 每 一 个
3条答案
按热度按时间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文档的versioning和What's New部分。
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请求,如下所示:
然后服务器将获得access_token以响应此请求。
cgyqldqp3#
It appears that they no longer support this flow: 的 最 大 值
由于 OAuth2 隐 式 流 中 存在 许多 安全 漏洞 , 因此 不 推荐 使用 对此 流 的 支持 。 请 使用 所 述 的 OAuth2 授权 代码 流 here 。
浏览 文档 , 它们 似乎 只 支持 授权 代码 流 :
根据 OAuth 2.0 规范 , 访问 用户 ( 资源 所有 者 ) 数据 的 授权 可以 使用 四 种 授权 类型 来 获得 。 Yahoo 目前 支持 四 种 授权 类型 中 的 一 种 :
这 对于 客户 端 应用 程序 可能 并 不 理想 :
当 您 有 服务 器 端 ( Web ) 应用 程序 时 , 应该 使用 这个 流程 。