无文本登录身份验证失败

时间:2014-07-23 20:14:36

标签: c# json http authentication ssl

我正在尝试创建一个C#应用程序,该应用程序登录到Pinger Textfree帐户并可以从中发送SMS消息。此服务的Web版本是基于闪存的,因此我一直在使用Fiddler和Wireshark来监视它使用的HTTP请求。我写了一些我认为应该登录的代码,但是我得到了一个" Bad Credentials"但是,我确实知道我使用的用户名和密码是准确的。我也很确定他们不会追加任何额外的东西,正如我在Fiddler中看到的那样。

static void Main(string[] args)
    {
        // Connect as client to port 443
        string server = "api.pinger.com";
        TcpClient client = new TcpClient(server, 443);

        // Create a secure stream
        using (SslStream sslStream = new SslStream(client.GetStream(), false,
            new RemoteCertificateValidationCallback(ValidateServerCertificate), null))
        {
            sslStream.AuthenticateAsClient(server);
            byte[] data = System.Text.Encoding.ASCII.GetBytes("POST https://api.pinger.com/1.0/web/login HTTP/1.1\r\n" +
                                                                "Host: api.pinger.com\r\n" +
                                                                "Connection: keep-alive\r\n" +
                                                                "Origin: http://pinger.com\r\n" +
                                                                "X-Rest-Method: POST\r\n" +
                                                                "Authorization: OAuth realm=\"https://api.pinger.com\", oauth_consumer_key=\"textfree-in-flash-web-free\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"HNN8gdLdskKnrtK2jbyN68b9JWQ%3D\", oauth_timestamp=\"1406102776\", oauth_nonce=\"635733471764340000\"\r\n" +
                                                                "Content-Type: application/json\r\n" +
                                                                "Accept: */*\r\n" +
                                                                "Referer: http://pinger.com/tfw/textFree_web.swf\r\n" +
                                                                "Accept-Encoding: gzip,deflate,sdch\r\n" +
                                                                "Accept-Language: en-US,en;q=0.8\r\n\r\n" +

                                                                //json info                                                                    
                                                                "{\"password\":\"testing\",\"username\":\"myquestion\",\"clientId\":\"textfree-in-flash-web-free-1406143265-10D066F9-8126-CD00-4C3D-64AB7BA4FF52\"}\r\n"
                                                              );

            sslStream.Write(data);
            data = new byte[client.ReceiveBufferSize];
            int bytesRead = -1;
            do
            {
                bytesRead = sslStream.Read(data, 0, data.Length);

                using (MemoryStream ms = new MemoryStream(data, 0, bytesRead))
                using (StreamReader rd = new StreamReader(ms))
                {
                    string returnData = rd.ReadToEnd();
                    Console.WriteLine(returnData);
                }
            } while (bytesRead != 0);
            Console.ReadKey();

        }
    }

PS我用这些凭据(用户:myquestion,Pass:testing)创建了这个问题,因为它们是正确的,它应该正常工作。

我正在使用我用Fiddler录制的请求的标题和格式。

我猜这个尝试失败的原因是我要么没有正确发布json,要么授权标题不正确或者是" clientId"关键在json。我做了很多试验和错误以及研究,我们将不胜感激。

0 个答案:

没有答案