Я прочитал учебник в https://developers.google.com/accounts/docs/OAuth2ServiceAccountFreebase oauth2 Bad Request (400) .Net
и попытался использовать их примеру, но получаю 400 плохой запрос. это мой код:
ClaimSet cs = new ClaimSet()
{
aud = "https://www.googleapis.com/oauth2/v3/token",
iss = "[email protected]eaccount.com",
exp = GetTime(DateTime.UtcNow.AddHours(1)).ToString(),
iat = GetTime(DateTime.UtcNow).ToString(),
scope = "https://www.googleapis.com/auth/freebase"
};
//get the signed JWT
var signedJwt = JsonWebToken.Encode(cs);
public static string Encode(object payload, JwtHashAlgorithm algorithm = JwtHashAlgorithm.RS256)
{
return Encode(payload, Encoding.UTF8.GetBytes(PrivateKey), algorithm);
}
public static string Encode(object payload, byte[] keyBytes, JwtHashAlgorithm algorithm)
{
var segments = new List<string>();
var header = new { alg = algorithm.ToString(), typ = "JWT" };
byte[] headerBytes = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(header, Formatting.None));
byte[] payloadBytes = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(payload, Formatting.None));
segments.Add(Base64UrlEncode(headerBytes));
segments.Add(Base64UrlEncode(payloadBytes));
var stringToSign = string.Join(".", segments);
var bytesToSign = Encoding.UTF8.GetBytes(stringToSign);
byte[] signature = HashAlgorithms[algorithm](keyBytes, bytesToSign);
segments.Add(Base64UrlEncode(signature));
return string.Join(".", segments.ToArray());
}
using (var wb = new WebClient())
{
var url = "https://www.googleapis.com/oauth2/v3/token/";
wb.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
var data2 = new NameValueCollection();
data2["grant_type"] = "urn:ietf:params:oauth:grant-type:jwt-bearer";
data2["assertion"] = signedJwt;
var response2 = wb.UploadValues(url, "POST", data2);
}
Теперь после получения маркеров доступа, я стараюсь писать в свободное основание: используя следующий учебник, я видел, что я должен получить глагол: https://developers.google.com/accounts/docs/OAuth2ServiceAccount#creatinganaccount
var url = "https://www.googleapis.com/freebase/v1/mqlwrite";
wb.QueryString.Add("lang", "/lang/en");
wb.QueryString.Add("query", "%5B%7B%0A%20%20%22mid%22%3A%20%22%2Fm%2F011840dm%22%2C%0A%20%20%22%2Fcommon%2Ftopic%2Ftopic_equivalent_webpage%22%3A%20%7B%0A%20%20%20%20%22connect%22%3A%20%22insert%22%2C%0A%20%20%20%20%22value%22%3A%20%22http%3A%2F%2Fwww.imdb.com%2Fname%2Fnm4963898%2F%22%0A%20%20%7D%0A%7D%5D");
wb.Headers.Add("Authorization", "Bearer " + accesstoken);
var ResponseBytes = wb.DownloadString(url);
Ценит help :)
Благодарим за отзыв. Я изменил свой код, как вы предложили (как вы можете видеть выше), но, к сожалению, все еще получает ошибку «400 Bad Request». Что я делаю неправильно? – user2051871
Хороший вопрос! Имейте то же самое, задаваясь вопросом, что делать. –
см. Добавление ответа –