0

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

首先,我使用 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 并不是最容易使用的东西,但希望有人在这里有一些见解,因为我似乎很接近。我希望我包含了您需要的所有信息,谢谢!

4

1 回答 1

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”等。所有信息(连同秘密)都将是用于生成签名,然后将其作为 api 调用的一部分传递给 yahoo。

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

高温高压

于 2014-08-24T21:26:04.467 回答