Токен доступа Google+ - PullRequest
       7

Токен доступа Google+

2 голосов
/ 21 сентября 2011

У меня мало проблем с недавно выпущенным Google+ API для получения токена доступа ...

Я следовал документации , я получил код ("4 / blablabla"), но когда я отправляю запрос POST для получения токена доступа, я получаю "(400) неверный запрос" ответ ...

Вот мой кусок кода:

// We have a request code, now we want an access token
StringBuilder authLink = new StringBuilder();
authLink.Append("https://accounts.google.com/o/oauth2/token");
authLink.AppendFormat("?code={0}", gplusCode);
authLink.AppendFormat("&client_id={0}", myClientId);
authLink.AppendFormat("&client_secret={0}", mySecret);
authLink.AppendFormat("&redirect_uri={0}", myRedirectUri);
authLink.Append("&scope=https://www.googleapis.com/auth/plus.me");
authLink.Append("&grant_type=authorization_code");

OAuthBase oAuth = new OAuthBase();
string normalizedUrl, normalizedRequestParameters;
string oAuthSignature = oAuth.GenerateSignature(new Uri(authLink.ToString()), appKey, appSecret, code, null, HttpMethod.POST.ToString(), oAuth.GenerateTimeStamp(), oAuth.GenerateNonce(), OAuthBase.SignatureTypes.HMACSHA1, out normalizedUrl, out normalizedRequestParameters);
oAuthSignature = oAuth.UrlEncode(oAuthSignature);

// Rebuild query url with authorization
string url = string.Format("{0}?{1}&oauth_signature={2}", normalizedUrl, normalizedRequestParameters, oAuthSignature);

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url.ToString());
request.Method = HttpMethod.POST.ToString();
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = 0;

// Send the request and get the response
try
{
    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
    {
        // Do stuff ...

Ответы [ 2 ]

2 голосов
/ 22 сентября 2011

Вы забыли запрос POST. Попробуйте это:

string url = "https://accounts.google.com/o/oauth2/token";

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url.ToString());
request.Method = HttpMethod.POST.ToString();
request.ContentType = "application/x-www-form-urlencoded";

// You mus do the POST request before getting any response
UTF8Encoding utfenc = new UTF8Encoding();
byte[] bytes = utfenc.GetBytes(parameters); // parameters="code=...&client_id=...";
Stream os = null;
try // send the post
{
    webRequest.ContentLength = bytes.Length; // Count bytes to send
    os = webRequest.GetRequestStream();
    os.Write(bytes, 0, bytes.Length);        // Send it
}

try
{
    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
    {
        // Do stuff ...

Это даст вам Json с токеном доступа. Также вы можете увидеть мой вопрос , который я задал сегодня и решил позже.

1 голос
/ 21 сентября 2011

API Google+ использует OAuth 2.0 для авторизации.Кажется, вы реализуете смесь OAuth 2.0 и OAuth 1.0 : ваш код вычисляет OAuth 1.0 oauth_signature для запроса OAuth 2.0, который устарел в OAuth 2.0.

Посмотрите на Черновик спецификации OAuth 2.0 и попробуйте точно следовать примеру в документации Google по OAuth 2.0 .Или просто используйте библиотеку Google .NET , которая поставляется с поддержкой OAuth 2.0.

...