【问题标题】:Google OAuth with Indy in Delphi在 Delphi 中使用 Indy 进行 Google OAuth
【发布时间】:2010-12-06 21:55:55
【问题描述】:

我正在将 Indy10 与 Delphi 一起使用,并试图让 Google's OAuth 工作。第一步是向 OAuthGetRequestToken 方法发出请求。下面的代码返回 400 错误。任何帮助将不胜感激。

procedure TForm1.Button1Click(Sender: TObject);
    var
      IdHTTP: TIdHTTP;
      IdSSLIOHandlerSocket1: TIdSSLIOHandlerSocketOpenSSL;
      Params: TStringList;
      mString: String;
    begin
      Params := tstringlist.create;
      IdSSLIOHandlerSocket1 := TIdSSLIOHandlerSocketOpenSSL.create(nil);
      IdHTTP := TIdHTTP.create(nil);

      with IdSSLIOHandlerSocket1 do begin
        SSLOptions.Method := sslvSSLv3;
        SSLOptions.Mode :=  sslmUnassigned;
        SSLOptions.VerifyMode := [];
        SSLOptions.VerifyDepth := 2;
      end;
      with IdHTTP do begin
        IOHandler := IdSSLIOHandlerSocket1;
        ReadTimeout := 0;
        AllowCookies := True;
        ProxyParams.BasicAuthentication := False;
        ProxyParams.ProxyPort := 0;
        Request.ContentLength := -1;
        Request.ContentRangeEnd := 0;
        Request.ContentRangeStart := 0;
        Request.ContentType := 'application/x-www-form-urlencoded';
        request.host := 'https://www.google.com';
        Request.Accept := 'text/html, */*';

        Request.BasicAuthentication := False;
        Request.UserAgent := 'Mozilla/3.0 (compatible; Indy Library)';
        HTTPOptions := [hoForceEncodeParams];
      end;
      Params.Add('scope=https://www.google.com/analytics/feeds/');
      Params.Add('oauth_consumer_key=anonymous');
      Params.Add('oauth_signature_method=HMAC-SHA1');
      Params.Add('oauth_signature=wOJIO9A2W5mFwDgiDvZbTSMK%2FPY%3D');
      Params.Add('oauth_timestamp=137131200');
      Params.Add('oauth_nonce=4572616e48616d6d65724c61686176');
      showmessage(HTTPDecode(IdHTTP.Post('https://www.google.com/accounts/OAuthGetRequestToken',Params)));

    end;

【问题讨论】:

    标签: delphi oauth indy10


    【解决方案1】:

    除了 400 之外,检查您是否在 响应标头 中也收到了返回消息。大多数 Web 服务都提供了某种关于问题所在的文本描述。

    还要验证 OpenSSL 库是否已实际加载,否则 Indy 可能会退回到服务器可能不接受的未编码通信。

    【讨论】:

      【解决方案2】:

      尝试通过HTTP Fiddler 路由您的请求。

      我发现它是一个很好的工具来跟踪 http/https 级别的问题。

      --杰罗恩

      【讨论】:

        【解决方案3】:

        查看响应 DataString(引发异常的位置),它将为您提供问题的更详细原因。
        例如,尝试使用您的代码,我首先得到一个“时间戳与当前时间太远”,然后在更新 oauth_timestamp 后,我得到一个“无效签名”......

        【讨论】:

        • 谢谢!我在 IdHTTP.pas 中搜索了数据字符串,放置了一个断点并得到了与您相同的第一个错误。将及时向大家发布。你是 francois.piette@overbyte.be ????
        • 虽然这并没有完全回答这个问题,但它确实促使我深入挖掘并查看对问题的更详细解释。最后我决定使用 AuthSub 身份验证。我已经让这个工作了。
        猜你喜欢
        • 2021-01-28
        • 1970-01-01
        • 2012-07-12
        • 1970-01-01
        • 1970-01-01
        • 2019-10-19
        • 1970-01-01
        • 1970-01-01
        • 2019-07-11
        相关资源
        最近更新 更多