2

我想将 yahoo 集成到我的 android 应用程序中以获取 yahoo 联系人。我使用了 yahoo 联系人 API,它打开了一个 WebView 来登录。当我使用 ouath 程序和 ouath 签名方法 HMAC-SHA1 从雅虎导入联系人时。我遇到了“签名无效”的问题。

如果我使用签名方法“PLAINTEXT”,它在使用 yahoo 社交 API 期间的 oauth 身份验证期间工作正常,它会导致签名类型无效。关于这个问题的任何想法?

而且我想要一些其他方式,通过它我不需要向用户显示 webview 并且身份验证在后台进行。登录后,我必须登录用户的联系人。任何想法...???

===============================================

以下是我收到的请求和回复:

第一个请求:-

https://api.login.yahoo.com/oauth/v2/get_request_token?oauth_nonce=asf234hkldfkjjksdbfjkbasdfsdasd&oauth_timestamp=1326787922&oauth_consumer_key=dj0yJmk9bmlsQzJxTEhsd254JmQ9WVdrOU1rODBZbXBaTkhNbWNHbzlORGN6TmpNNE5EWXkmcz1jb25zdW1lcnNlY3JldCZ4PWE3&oauth_signature_method=plaintext&oauth_signature=e6797e7744d52cf101fd9d4671514469429afe07%26&oauth_version=1.0&xoauth_lang_pref=en-us&oauth_callback=https://api.login.yahoo.com /oauth/v2/桌面

响应第一请求:-

oauth_token=kkdhque&oauth_token_secret=43afb117c8880535d40d91ab6eb1cd9cf070b6bb&oauth_expires_in=3600&xoauth_request_auth_url=https%3A%2F%2Fapi.login.yahoo.com%2Foauth%2Fv2%2Frequest_auth%3Foauth_token%3Dkkdhque&oauth_callback_confirmed=true

第二个请求,其中用户在 webview 中输入他的用户名和密码。

https://api.login.yahoo.com/oauth/v2/request_auth?oauth_token=k3qacet

用户验证此应用程序可以在 webview 中使用我的电子邮件地址的第三个请求。

这导致了oauth验证器。

webview 完成并且用户获取访问令牌或 (oauth_token) 的第四个请求

https://api.login.yahoo.com/oauth/v2/get_token?oauth_consumer_key=dj0yJmk9bmlsQzJxTEhsd254JmQ9WVdrOU1rODBZbXBaTkhNbWNHbzlORGN6TmpNNE5EWXkmcz1jb25zdW1lcnNlY3JldCZ4PWE3&oauth_signature_method=PLAINTEXT&oauth_version=1.0&oauth_verifier=rwbhqa&oauth_token=k3qacet&oauth_timestamp=1326787922&oauth_nonce=asf234hkldfkjjksdbfjkb&oauth_signature=e6797e7744d52cf101fd9d4671514469429afe07%26737c58816d097623629eac73c8c17207c641f360

响应第四个请求:-

oauth_token=A%3DhX_2we7E7jDnmFyp_8sBq2jECdy3Qq3joNFqb6S70DcHwqh81q19r3KFvSljXFrjVjk3gw8UOkMcvs7sYNdZzbTDQhwYyPswES1HRhBv94wYFmCclOmXCL.XNOCgNQWkKbHha0puKPRnSY12tKASSPdmqYdynuw5c72sL6mb89Ord7hFmkn7mOqKeB5E0R.H1oM1vkxIc2_x3nhifZvHP1gHxG8rm3I2Qh4PsXl3sTeAOVp7xGjOVELdqjX4rxlvXwAHW8OHrZLniCiNNqtb9yhEDBGutFyos0gQikBZ3FQjS04Q0X6Vz53FwN58GWS6ok1IpppwYSaXVGxf6T3mtGZo90lNugbCAho5H9frYkV3dq9xM.LIiBdA3nPEJfef3ZCciNSYHtk_0_k3jSChDIiDuKwx4wwaHUSygZq0cOSWGV6iWdnc9qitu7xLLzzO5YDFStmkZK2ks144RLVookPqsPOHew.zovCcPup3oG3bOq4FKR9UAXaIfqtj6bMNauBpFiTmy8r9WIKJ5lKCJZux1oqCHECpSjhK98P2vTqVv08jU3.S15W6dPro9lwOVeMStacATvWE0wVumeOhg54.190zTvWxaCyNBSVKuKxlsOc8cDY6o_qhFtf.hiWLisVHKOpGkMhsdpECuaYaCSDGkNO8iEEcGE5nAS1VHbuxWl6TW1pRQxBUrDQWZiO.FPKAFQhz5gNjSbE14ygihPQVYYe_vJ0D.wdsOk4VY.aKovCe10vTl5N9t58ZhqJIH7pviYRuS8U- &oauth_token_secret=50f8b0c3742c653270f4ab171e344a6cb525eca5&oauth_expires_in=3600 &oauth_session_handle=AGgtEE.0Q98PruZjCCh2K9YIlCw_faQSJbrMRUeMzledZ.Tgqrg-&oauth_authorization_expires_in=820695219&xoauth_yahoo_guid=NNZ4BOGR43W5RY6LMEXJVUZYUE

第五次请求以获得我最终想要的用户的联系人列表。

http://social.yahooapis.com/v1/user/NNZ4BOGR43W5RY6LMEXJVUZYUE/profile?format=json&OAuth_realm=yahooapis.com&oauth_consumer_key=dj0yJmk9bmlsQzJxTEhsd254JmQ9WVdrOU1rODBZbXBaTkhNbWNHbzlORGN6TmpNNE5EWXkmcz1jb25zdW1lcnNlY3JldCZ4PWE3&oauth_nonce=asf234hkldfkjjksdbfjkb&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1326787922&oauth_token=A%3D3cDEMvjdhV1KBgctAVMkpK5rham6RwashDSWUpZZWcnCHhG9U5SKiPFRIFBqYWyIik8MI.ALFZMNc0tFbr55uYoHZKP_4BCKjmw99FvLlILhKvg7EqsUqxW4riEcnz0vFtHM07No_nt4KYKEYjuzuZVzOU8Ig14r8t97XfBksMUGuUvkkdKRyfnmcauz9uCH.XA5s6OUzK5dSCUvrIgvnF6U7E.V8Dt0TRc_SAVn_wpm09qny5LrE5oGv1QL1c91PHztbr3IjXQctk4wGP8rOyCumfrs_IbV55.KvD18Ykw.oEUgFJRhjBxna5Dcn4YT1A0YziLkBmPayODSnh5i4QR_Y7rZKBxmKS06WTxO9xiJZVJi9a0eMWgHvkhT4G4inB7C8GakCSnq9NxXVO5jW.zJFJWMbzuxiNXvo4gKvCE03hEtNPGPwvUK1RtZyMZgyBXzr26Lxpss8CMUL2qtdR6HFSLCTc5feltiLCfiez359Bzb6HIzz6XOwBlcaLa44qjBA5hBUYPvPj2NRyEAhHKJkKj2qzT_vm8pHX65nVGUtIq9765oP.yZMU75WewKcBtD1UdaOoYW9ViKghJRajAy9AE9MHDe4M1VG0cRkO91vux77SbyNtm3y8NnUbCoTL9iL3ltFfABfg6xKW2c.IO4cQ0NowMjUqf.JqboY_ckjxUAXp9oP1tHkEZX1jb4GRv410chjR471ayKMZBjkgay.5XmN4Uq93C.h_hIa25wCBMKW9Zr1I512aZ3hyMePYHneHCz94c-&oauth_version=1.0&oauth_signature=e6797e7744d52cf101fd9d4671514469429afe07&48ae3c65bf198592e4758005bb551c14e163fa61oauth_signature=e6797e7744d52cf101fd9d4671514469429afe07&48ae3c65bf198592e4758005bb551c14e163fa61oauth_signature=e6797e7744d52cf101fd9d4671514469429afe07&48ae3c65bf198592e4758005bb551c14e163fa61

第五次请求的响应

{ error: { lang: "en-US", description: "请提供有效凭据。OAuth oauth_problem="signature-invalid", realm="yahooapis.com"" } }

4

1 回答 1

1

如果您收到签名无效,则您的 OAuth 请求很可能签名不正确。OAuth 1.0a 及以下版本确实令人头疼。Alhamdulillaah 他们正在开发 AOuth2.0,它可以消除很多弱智。

如果您不介意发布您的 OAuth 签名库、授权标头和请求,我可以为您提供详细的帮助。我见过人们犯的最常见的错误是他们使用非 GMT 时间戳,由于解析错误,他们使用了返回令牌的子集(您可能不必担心这一点,因为 Yahoo 令牌非常干净 [A-za-z0 -9] 但不是每个人都这样——无论哪种方式,在登录过程的第一步手动查看您的响应并确保您的代码正在解析整个标头),还请确保您正在发送所有 REST 的验证程序请求,是的,您必须输入验证器才能登录。其他时候,我看到人们的 HMCA 算法无法正常工作,或者他们忘记正确地对其签名变量的 Base64 版本进行 URL 编码......还有什么......就是这样我想到了。它'

继续前进,没有理由需要 webview。发送和接收的信息只是 HTML 代码,因此您可以自己解析它或使用 290 万个谷歌结果中的任何一个用于 html 解析器。您需要网络浏览器的唯一步骤是让用户登录他们的雅虎帐户,甚至可以通过解析页面并获取 cb2_authenticity_token 或类似内容然后将其提交到 HTML 中的地址来自动化 [1] [形式]。它会将带有验证器的页面发回给你,你也可以解析出来,我已经用 twitter 成功地做到了这一点。

无论如何,发布一些代码,我们可以为您提供进一步的帮助。

[1] 编辑说明,您必须拥有 yahoo L/P 才能自动执行此操作。

于 2012-01-17T07:40:54.080 回答