【问题标题】:Problems with Yahoo API after authentication身份验证后 Yahoo API 的问题
【发布时间】:2014-08-24 17:06:52
【问题描述】:

我一直在寻找这个问题的答案,但我似乎找不到答案。我已经尝试了几件事,所有这些我都会在这里列出,希望有人能指出我正确的方向。

首先,我使用 Hapi 框架构建了一个简单的 Node 应用程序。此外,我正在使用同样来自 Hapi 家伙的 Bell 库来通过 Yahoo 进行身份验证,并使用 hapi-auth-cookie 来设置我的会话与身份验证结果。据我所知,这工作得很好。

一旦用户通过身份验证,贝尔就会向我提供令牌和秘密。

令牌看起来像这样:

A=vvnxl1_FhCK6FPEFbIA.p_N8cSet7Ifmye.i3mWa6hrlh7fXecZhQvumjKSXPkRGfcj2BaFSmZCWPXeW67G8kqiS4G3Z7yBR

秘密看起来像这样:

9e17917hsjf863c220c35f3f3385b6e4cd586c84

因此,一旦我进行了身份验证并被重定向到我的主页,我就有了这两个并设置了一个 cookie。我的理解是我准备好了。然后我尝试使用以下 URL 访问 Yahoo API:

https://fantasysports.yahooapis.com/fantasy/v2/leagues;league_keys=328.l.5668/standings?format=json

点击此 URL 的响应是:

{
"error":
    {
        "lang": "en-US",
        "description": "Please provide valid credentials. OAuth oauth_problem=\"unable_to_determine_oauth_type\", realm=\"yahooapis.com\""
     }
 }

显然,我尝试访问的 URL 不完整。但是,我不确定所需的参数是什么。我去过雅虎文档 1000 次,但我似乎找不到这个具体的答案。那里的所有示例大多与身份验证位有关,我应该这样做。所以,希望我能走运,我开始尝试在 URL 中传递令牌和秘密。在这一个中,我尝试了 API URL + 令牌 + 秘密 + 签名。我使用的令牌和秘密是上面引用的贝尔提供的:

https://fantasysports.yahooapis.com/fantasy/v2/leagues;league_keys=328.l.5668/standings?format=json&&oauth_token=A=tqq2L3D54ATsQZbgHB95b0ZyCj_kgq01R69vTulZ6lP9evhzddrIaksmd6u21fNSPFQ8WtVBsWr9GFk1zQtsw_OP4pKKaDKs2TxHlqwAYp4ZyIkthzPcSnJQka.J2THeK8BHC8eeisT4EeQpMqcDgefX6Hbb1CsQ_bD00ECd3AE.uGdF_6sm&oauth_secret=b5d2359f191cc72cfd318b5cf&oauth_signature=524a4f6e1407acd00a98f53973180%26b5d2359f191cc4c7d7d7bfd318b5cf

现在,它告诉我令牌被拒绝:

{
    "error": {
        "lang": "en-US",
        "description": "Please provide valid credentials. OAuth oauth_problem=\"token_rejected\", realm=\"yahooapis.com\""
    }
}

我也试过不先签名,在这种情况下,错误告诉我签名丢失了。

我们将不胜感激。从过去一周的搜索中,我发现 Yahoo API 并不是最容易使用的东西,但希望有人在这里有一些见识,因为我似乎很接近。我希望我包含了您需要的所有信息,谢谢!

【问题讨论】:

    标签: javascript node.js oauth yahoo-api hapijs


    【解决方案1】:

    一旦用户被正确验证,那么您将拥有“oauth_token”和“oauth_token_secret”,正如您所提到的。

    现在,在尝试访问 Yahoo API 时,您需要根据 oauth 规范提供“令牌”和“秘密”,以便 Yahoo 了解您可以访问他们的 API。

    这就是 oauth 的工作方式,您可以提供 oauth 信息作为“授权”标头的一部分,也可以使用 url 查询参数。

    “oauth_token_secret”(与所有其他呼叫信息)应用于生成“oauth_signature”,雅虎将在其结束时进行验证。在访问他们的 api 时,不应按原样发送“秘密”。

    请注意,oauth 信息不仅涉及“token”和“signature”,还涉及“nonce”、“timestamp”、“version”、“signature_method”等。所有信息(连同 secret ) 将用于生成签名,然后将其作为 api 调用的一部分传递给 yahoo。

    Oauth 文档可以在http://tools.ietf.org/pdf/rfc5849.pdf找到

    HTH

    【讨论】:

    • 感谢您的回复!这就是我目前的立场。该 url 现在具有时间戳、随机数、签名方法等。我正在使用该方法生成一个 base 64 字符串,并将所有这些与 new Buffer(myFullUrl).toString('base64') 一起生成。我得到的错误,现在我正在生成一个正确的签名(我认为)是“consumer_key_unknown”......这对我来说没有意义,为什么会这样。前几天我用相同的钥匙使用了不同的插件,它可以工作。再次感谢!
    • 您是否提供了“oauth_consumer_key”参数的值?此调用需要“oauth_consumer_key”。您应该有一个 yahoo apikey,您应该在进行 api 调用时将其用作“oauth_consumer_key”的值。
    • 我是。在再摆弄它之后,看起来签名实际上是不正确的。不再收到密钥未知错误,现在收到签名无效错误。
    • 现在您即将完成它。只需确保您使用所有必需的参数和值来生成签名。就是这样。
    • 我最终使用了 node-oauth 插件来处理很多繁重的工作。但它仍然无法正常工作。终于明白我的错误了。我在 api 调用中使用 https 而不是 http。哇。
    猜你喜欢
    • 1970-01-01
    • 2022-07-27
    • 2017-07-14
    • 2019-08-24
    • 2011-01-18
    • 2015-03-28
    • 2015-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多