PL/SQL OpenID+OAuth实现-400-错误的请求



我正在尝试使用PL/SQL实现(OpenId+OAuth)混合协议。我已经成功地用谷歌为我的网站设置了OpenID身份验证http://example.com用户被引导到google帐户进行身份验证。成功身份验证后,用户将重定向回example.com,并附加OAuthRequestToken。然后,我试图用OAuthAccessToken交换这个令牌,以访问各种谷歌服务。我在混合(OpenID+OAuth)身份验证后得到的OAutheRequestToken如下:

oauth_token = 4/AR17dDMb4xHG3L4WFYLIzkhCj0c7

我得到的oauth_base_string如下:

oauth_base_string = GET&https%3A%2F%2Fwww.google.com%2Faccounts%2FOAuthGetAccessToken&oauth_consumer_key%3Dexample.com%26oauth_nonce%3D56575A5754587057576E6C77576B78695757354F%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1308046070%26oauth_version%3D1.0%26oauth_token%3D4%2FAR17dDMb4xHG3L4WFYLIzkhCj0c7

然后,我在查询字符串本身中放置一个请求,将这个oauth_token(OAuthRequestToken)与OAuthAccessToken交换为:

https://www.google.com/accounts/OAuthGetAccessToken?oauth_consumer_key=example.com&oauth_token=4/AR17dDMb4xHG3L4WFYLIzkhCj0c7&oauth_signature_method=HMAC-SHA1&oauth_signature=RpqSLGp5nIGvL8W4vmC8inUfBFQ%3D&oauth_timestamp=1308046070&oauth_nonce=56575A5754587057576E6C77576B78695757354F&oauth_version=1.0

这将导致400-错误请求。

我试过寻找类似的东西,但仍然没有找到。Stack Overflow的这篇文章也处理了类似的问题。上面写着

…%逃跑可能是的一个问题

这有点令人困惑。

我们必须在请求中对oauth_signature参数进行两次URL编码吗?

我使用以下代码生成oauth_signature:

oauth_sig_mac := DBMS_CRYPTO.mac (UTL_I18N.string_to_raw
 (oauth_base_string,
 'AL32UTF8'),DBMS_CRYPTO.hmac_sh1,
 UTL_I18N.string_to_raw (oauth_key,
 'AL32UTF8'));
 oauth_signature := UTL_RAW.cast_to_varchar2(UTL_ENCODE.base64_encode
 (oauth_sig_mac));

此处:

oauth_key := urlencode('oauth-consumer-secret-key') || '&';

非常感谢您的帮助。

我建议使用https://runscope.com测试你的api。太棒了。

我使用oauth 1.0调用Zero api,所以我不确定它是否只是不同的端点,但你可以检查以下几点:

对从上一个请求中收到的oauth令牌进行编码,以便"/"是ASCII编码的。

并且,通过runscope测试你的api,检查你的时间戳是旧的还是新的——这会抛出一个错误的请求。

p.s一个错误的请求比401授权的错误要好,所以你的几乎就在那里

相关内容

  • 没有找到相关文章

最新更新