Saya memiliki masalah serupa ketika mencoba terhubung ke layanan OAuth2 Google.
Saya akhirnya menulis POST secara manual, tidak menggunakan WebRequest, seperti ini:
TcpClient client = new TcpClient("accounts.google.com", 443);
Stream netStream = client.GetStream();
SslStream sslStream = new SslStream(netStream);
sslStream.AuthenticateAsClient("accounts.google.com");
{
byte[] contentAsBytes = Encoding.ASCII.GetBytes(content.ToString());
StringBuilder msg = new StringBuilder();
msg.AppendLine("POST /o/oauth2/token HTTP/1.1");
msg.AppendLine("Host: accounts.google.com");
msg.AppendLine("Content-Type: application/x-www-form-urlencoded");
msg.AppendLine("Content-Length: " + contentAsBytes.Length.ToString());
msg.AppendLine("");
Debug.WriteLine("Request");
Debug.WriteLine(msg.ToString());
Debug.WriteLine(content.ToString());
byte[] headerAsBytes = Encoding.ASCII.GetBytes(msg.ToString());
sslStream.Write(headerAsBytes);
sslStream.Write(contentAsBytes);
}
Debug.WriteLine("Response");
StreamReader reader = new StreamReader(sslStream);
while (true)
{ // Print the response line by line to the debug stream for inspection.
string line = reader.ReadLine();
if (line == null) break;
Debug.WriteLine(line);
}
Respons yang ditulis ke aliran respons berisi teks kesalahan spesifik yang Anda cari.
Secara khusus, masalah saya adalah bahwa saya meletakkan endline di antara potongan data yang disandikan dengan url. Ketika saya membawa mereka keluar, semuanya berhasil. Anda mungkin dapat menggunakan teknik serupa untuk terhubung ke layanan Anda dan membaca teks kesalahan respons aktual.