2013-03-18 2 views
0

Я успешно получил ключевой токен для вышеуказанной аутентификации oauth от поставщика Google через их api.Получить информацию о пользователе от token C#

давайте рассмотрим «доступ-маркер» является XXXII-ххххх-ххх-ххххх-ххххх, который имеет объем https://www.googleapis.com/auth/userinfo.profile

теперь, когда я попал в браузер с маркером доступа для извлечения информации значений пользовательских имеет

https://www.googleapis.com/oauth2/v1/userinfo?access_token=xxxii-xxxxx-xxx-xxxxx-xxxxx; 

я получаю ответы, как

{ 
"id": "XXXXXXXXXXXXXX", 
"name": "XXXXXXXXXXXXXXXX", 
"given_name": "XXXXXXXXXXX", 
"family_name": "X", 
"picture": "XXXXXXXXXX/photo.jpg", 
"locale": "en" 
} 

Моя проблема когда я разобрать выше запрос беспересадочный тьфу код я не получаю ответы, как я получил через браузер

код, который я использовал

String userInfo = "https://www.googleapis.com/oauth2/v1/userinfo?access_token="+token; 
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(userInfo); 
HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); 
StreamReader sr = new StreamReader(resp.GetResponseStream()); 

sr.Close(); 

JObject jsonResp = JObject.Parse(userInfo); 
string info = ""; 
info += "<h3>" + jsonResp.Root["name"] + "</h3>"; 
info += "<img src='" + jsonResp.Root["picture"] + "' width='120'/><br/>"; 
info += "<br/>ID : " + jsonResp.Root["id"]; 
info += "<br/>Email : " + jsonResp.Root["email"]; 

Response.Write(info); 

в ответ я получаю пустую ссылку.

и ошибка я получил в строке

JObject jsonResp = JObject.Parse(userInfo); 

в

Неожиданный символ встречается при анализе значения: ч. Строка 1, позиция 1.

Стек след:

на Newtonsoft.Json.JsonTextReader.ParseValue (Char currentChar) в Newtonsoft.Json.JsonTextReader.ReadInternal() в Newtonsoft.Json. JsonTextReader.Read() at Newtonsoft.Json.Linq.JObject.Load (читатель JsonReader) at Newtonsoft.Json.Linq.JObject.Parse (String json) at _Default.getresponse (String token) в d: \ Oauth \ WebSite3 \ Default.aspx.cs: строка 99

Жду ваши ценные предложения и комментарии

+3

Вы разборе url 'userInfo', а не ответ' sr'. – Caramiriel

+0

@Caramiriel я получаю nul-ответ от sr – GowthamanSS

+0

Не могли бы вы проверить 'HttpWebResponse resp' и добавить свои выводы к вопросу? Возможно, он возвращает статус HTTP 404 или 500. – Caramiriel

ответ

2

Используйте этот код, чтобы получить информацию о пользователе:

var userInfoUrl = "https://www.googleapis.com/oauth2/v1/userinfo"; 
var hc = new HttpClient(); 
hc.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", authToken); 
var response = hc.GetAsync(userInfoUrl).Result; 
dynamic userInfo = response.Content.ReadAsAsync().Result; 
return userInfo; 

Существует хорошая статья об интеграции dotnetopenoauth и Google API: http://www.dotnetopenauth.net/documentation/securityscenarios/

+0

вы можете поделиться ссылочными именами DLL для вышеуказанного метода – GowthamanSS

+0

Все они являются частью .net: System.Net.Http.dll – Dima

Смежные вопросы